regex - 用于搜索重叠模式的正则表达式

标签 regex

这是我的问题的简化版本:

我正在尝试提取所有被非单词字符包围的字母,但当非字符重叠时我的正则表达式不起作用。

这是我的代码:

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("-------------------");
        }

http://www.regular-expressions.info/lookaround.html

关于regex - 用于搜索重叠模式的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4189879/

相关文章:

PHP 正则表达式 - 有效的 float

javascript - 如何使用嵌套正则表达式

javascript - 受正则表达式模式限制的 HTML 输入字段

regex - 如何使用正则表达式和 Powershell 提取字符串 "Task(12345)"中的数字?

regex - Perl正则表达式定界符/.../和#...#之间的区别

java - 检查值是否没有数字,如果是,则用简写 Java 替换为 'Invalid'

javascript - 匹配 101 - 999 的正则表达式模式

python - 有条件分割字符串

java - 使用 Java 替换字符串中的模式

python - 如何获取字符串中的第一个单词