簡體   English   中英

如何在C#中的字符串的特定位置找到正則表達式匹配?

[英]How can I find a Regex match at a specific location of the string in C#?

我想知道正則表達式是否匹配字符串的特定位置。

例:

Regex r = new Regex("d");
string s = "abcdefg";

我想匹配函數找到匹配, 只有當它使得使用上面的例子,在位置匹配是在精確的給定的位置13 ,及5應該給no matchmatchno match ,分別。 不幸的是,C# Regex.Match方法給出了:

r.Match(s, 1); // => match ("d")
r.Match(s, 3); // => match ("d")
r.Match(s, 5); // => no match

我理解這是因為Regex.Match方法向前搜索第一個匹配,但是如何在不必創建子字符串的情況下阻止此行為?

\\G添加到正則表達式的開頭:

Regex r = new Regex(@"\Gd");
string s = "abcdefg";
Console.WriteLine(r.Match(s, 1).Success); // False
Console.WriteLine(r.Match(s, 3).Success); // True
Console.WriteLine(r.Match(s, 5).Success); // False

\\G將匹配錨定到上一個匹配結束的位置,如果沒有先前的匹配,則將其錨定到字符串的開頭。 隨着第二個參數Match ,你有效地告訴它以前的比賽,這在該位置結束。

使用substring和字符串開頭的錨點^

Regex r = new Regex("^d"); // Use the start of string anchor
string s = "abcdefg";
r.IsMatch(s.Substring(3)); // Match at exactly fourth character (0-based index 3)

或者,為避免將字符串復制到內存中,請使用量化.

Regex r = new Regex("^.{3}d");
r.IsMatch("abcdefg");

模式^.{3}d

  • 從字符串的開頭開始
  • 恰好匹配任何東西的三個字符
  • 然后匹配字母'd'

好吧,如果你總是尋找相同的索引,你可以通過在開頭添加通配符來填充你的正則表達式,以“填充”結果,即:

Regex r = new Regex("^.{3}d");
r.isMatch("abcdefg"); // true
r.isMatch("adcffed"); // false
r.isMatch("abcddef"); // true

另一方面,如果你想使用不同索引的相同正則表達式,你可以只使用^字符匹配字符串的開頭:

Regex r = new Regex("^d");
r.isMatch("abcdefg".substring(3)); // true
r.isMatch("adcffed".substring(3)); // false
r.isMatch("abcddef".substring(1)); // false

注意:如果你只是在尋找一個簡單的字符串而不是一個模式,你應該只使用string.IndexOf

暫無
暫無

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

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