Regex匹配以某个字符结尾但不以另一个中间空白字符开头的字符串



我试图使用正则表达式:(?<!:)[s]+",但没有效果。

我想要的是匹配一个前面有空格的引号,除非空格前面有冒号。

然而,上面的正则表达式是无用的,因为它匹配不正确。上面的正则表达式将匹配字符串:__"(使用_表示空间),因为它只匹配_"。它从第二个空格开始匹配,但根本不应该匹配。

我正在寻找:

A " - MATCH
B " - MATCH
: " - NO MATCH
A:   " - NO MATCH
:    " - NO MATCH
:                           " - NO MATCH
:                A " - MATCH

消极的落后并没有帮助,因为它确实与大多数人相匹配。

匹配所需字符串的一种方法是要求除空格s或冒号:之外的字符出现在s+:前面

(?<![:s])s+"

将空格s包含在负向后看的列表中可以确保空格不能被计算为用于匹配字符串的"非冒号"字符。

演示。

试试这个

      const string FILENAME = @"temptest.txt";
        static void Main(string[] args)
        {
            string input = File.ReadAllText(FILENAME);
            string pattern = "^[^:]\s+"";
            MatchCollection matches = Regex.Matches(input, pattern, RegexOptions.Multiline);
        }​

最新更新