簡體   English   中英

正則表達式提取引號之間的字符串

[英]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);

IDEONE演示

請看一下正則表達式中的分組構造

分組構造描繪了正則表達式的子表達式,並捕獲了輸入字符串的子字符串。 您可以使用分組構造執行以下操作:

  • 匹配在輸入字符串中重復的子表達式。
  • 將量詞應用於具有多個正則表達式語言元素的子表達式。 有關量詞的更多信息,請參見[正則表達式中的量詞] [3]。
  • 在[Regex.Replace] [4]和[Match.Result] [5]方法返回的字符串中包含一個子表達式。
  • 從[Match.Groups] [6]屬性中檢索單個子表達式,並將其與整個匹配文本分開進行處理。

請注意, 如果不需要重疊的匹配 ,則捕獲組機制是此處的最佳解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM