正则表达式匹配以某个字符结尾的字符串,但不与另一个带有中间空格的字符串开头

时间:2015-11-06 01:55:50

标签: c# .net regex regex-lookarounds

我正在尝试使用正则表达式:(?<!:)[\s]+"无效。

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

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

我正在寻找:

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

负面的背后帮助没有帮助,因为它确实与大部分相匹配。

2 个答案:

答案 0 :(得分:3)

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

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

在负面后卫列表中包含空格\s可确保为了匹配字符串,不能将空格计为“非冒号”字符。

Demo.

答案 1 :(得分:0)

试试这个

      const string FILENAME = @"\temp\test.txt";
        static void Main(string[] args)
        {
            string input = File.ReadAllText(FILENAME);
            string pattern = "^[^:]\\s+\"";

            MatchCollection matches = Regex.Matches(input, pattern, RegexOptions.Multiline);
        }​