[英]Regex to extract string between quotes
我正在嘗試提取兩個引號之間的字符串,並且我以為我的正則表達式可以正常工作,但是它在我的GroupCollection中給了我兩個字符串,而我不能讓它忽略第一個,包括第一個引號和ID =
我要解析的字符串是
測試ID =“ 12345”你好
我想返回一組12345,以便以后可以在代碼中對其進行操作。 我已經嘗試使用以下正則表達式: http : //regexr.com/3bgtl ,使用以下代碼:
nodeValue = "Test ID=\"12345\" hello";
GroupCollection ids = Regex.Match(nodeValue, "ID=\"([^\"]*)").Groups;
問題在於GroupCollection包含兩個條目:
ID =“12345
12345
我只希望它返回第二個。
使用正向后看運算符:
GroupCollection ids = Regex.Match(nodeValue, "(?<=ID=\")[^\"]*").Groups;
您還使用了一個捕獲組(括號),這就是為什么您獲得2個結果的原因。
有幾種方法可以完成此操作。 我喜歡命名捕獲組以提高可讀性。
具有命名捕獲組的正則表達式:
"(?<capture>.*?)"
您的代碼將是:
match.Groups["capture"].Value
您的代碼完全可以,並且在這里建議的所有解決方案中都是最有效的。 捕獲組允許以最快,最省資源的方式匹配較大文本中的子字符串。
您只需使用正則表達式訪問捕獲的由圓括號定義的組1。 像這樣:
var nodeValue = "Test ID=\"12345\" hello";
GroupCollection ids = Regex.Match(nodeValue, "ID=\"([^\"]*)").Groups;
Console.WriteLine(ids[1].Value);
// or just on one line
// Console.WriteLine(Regex.Match(nodeValue, "ID=\"([^\"]*)").Groups[1].Value);
分組構造描繪了正則表達式的子表達式,並捕獲了輸入字符串的子字符串。 您可以使用分組構造執行以下操作:
- 匹配在輸入字符串中重復的子表達式。
- 將量詞應用於具有多個正則表達式語言元素的子表達式。 有關量詞的更多信息,請參見[正則表達式中的量詞] [3]。
- 在[Regex.Replace] [4]和[Match.Result] [5]方法返回的字符串中包含一個子表達式。
- 從[Match.Groups] [6]屬性中檢索單個子表達式,並將其與整個匹配文本分開進行處理。
請注意, 如果不需要重疊的匹配 ,則捕獲組機制是此處的最佳解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.