【问题标题】:C# regEx expression not matching newlineC# regEx 表达式不匹配换行符
【发布时间】:2013-09-20 03:21:32
【问题描述】:

这是我的文件 test1.txt

Line 4:   http://go34.microsoft.com/fwlink/p/?LinkId=333333
    Line 4:   http://go/p.microsoft.com/fwlink/p/?LinkId=333333

我想编写一个匹配此处列出的 2 个 URL 的正则表达式。这是我正在使用的正则表达式

string pattern = "http://go.*?.microsoft.com/fwlink.*?[\r\n]";

我希望比赛如下:

http://go34.microsoft.com/fwlink/p/?LinkId=333333
http://go/p.microsoft.com/fwlink/p/?LinkId=333333

我只是无法获得匹配项,也无法弄清楚为什么它不匹配。相同的正则表达式适用于记事本++。不知道我做错了什么。有人可以帮忙吗。

【问题讨论】:

  • 可能不匹配,因为第二行末尾没有换行符
  • 您希望在一个匹配项中包含两个 URL,还是要返回多个匹配项?我觉得这应该很明显,但我对此表示怀疑。也许让你的[\r\n] 可选?

标签: c# regex


【解决方案1】:
string pattern = "http://go.*?.microsoft.com/fwlink.*?$";

var urls = Regex.Matches(text, pattern,RegexOptions.Multiline)
            .Cast<Match>()
            .Select(m => m.Value.Trim())
            .ToList();

【讨论】:

    【解决方案2】:

    试试Regex.IsMatch(input, @"\s*http://go\S*\.microsoft.com/fwlink\S*\s*", RegexOptions.Multiline)。这将匹配仅包含由任意数量的空白字符包围的 url 的任何行。

    Regex.Repalce(input, @"\s*(http://go.*\.microsoft.com/fwlink\S*)\s*", "$1", RegexOptions.Multiline) 只会得到匹配的 url。

    【讨论】:

      【解决方案3】:

      也许您需要在文件末尾有一个空行(按 Enter)?您的文件实际上是否以 \r\n 结尾?

      【讨论】:

        【解决方案4】:

        可能您的字符串只是以 Line Feed aka "\n" 而不是 Carriage Return Line Feed aka " 结尾\r\n",也许你可以在正则表达式的末尾试试这个\r?\n

        此外,您可以将$ 元字符与[^] 结合使用,以匹配除换行符以外的任何内容,例如:

        string pattern = "http://go.*?.microsoft.com/fwlink[^$+]"
        

        【讨论】:

          【解决方案5】:

          试试这个:

          //note the @ at the beginning
          string pattern = @"http://go.*?.microsoft.com/fwlink.*?[\r\n]";
          

          【讨论】:

            猜你喜欢
            • 2014-06-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-12
            • 2021-09-17
            • 1970-01-01
            相关资源
            最近更新 更多