这是我的问题的简化版本:
我正在尝试提取所有被非单词字符包围的字母,但当非字符重叠时我的正则表达式不起作用。
这是我的代码:
var text = "Z#A#B#S";
var regex = new Regex(@"\W(?<letter>\w)\W");
foreach (var m in regex.Matches(text).Cast<Match>())
{
Console.WriteLine("Match = {0}", m.Value);
Console.WriteLine("Letter = {0}", m.Groups["letter"].Value);
Console.WriteLine("-------------------");
}
我希望它同时匹配 A 和 B,但它只匹配 A。这是输出:
Match = #A#
Letter = A
-------------------
这确实适用于文本“Z#A##B#S”(两个匹配之间没有重叠)。
如何从文本“Z#A#B#S”中同时提取 A 和 B?
谢谢
最佳答案
使用后视和前视
var text = "Z#A#B#S";
var regex = new Regex(@"(?<=\W)\w(?=\W)");
foreach (Match m in regex.Matches(text))
{
Console.WriteLine("Letter = {0}", m.Value);
Console.WriteLine("-------------------");
}
关于regex - 用于搜索重叠模式的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4189879/