【问题标题】:How to completely ignore linebreak and tab in RegEx?如何完全忽略 RegEx 中的换行符和制表符?
【发布时间】:2011-01-11 03:48:16
【问题描述】:

有什么方法可以完全忽略 RegEx 中的换行符和制表符等? 例如,换行符和制表符可以在内容字符串中的任何位置以任何顺序找到。

... [CustomToken \t \r\n Type="User" \t \r\n Property="FirstName" \n /] ... [CT ...

这是我目前使用的正则表达式:

(\[CustomToken).*?(\/\])

.NET API

Regex.Matches(string input, string pattern)

感谢您的建议。

【问题讨论】:

    标签: c# asp.net regex


    【解决方案1】:

    如果你只是想让那个正则表达式匹配那个输入,你需要做的就是指定单行模式:

    Regex.Matches(input, @"\[CustomToken).*?(/\])", RegexOptions.Singleline);
    

    点元字符通常匹配除换行符 (\n) 之外的任何字符。单行模式,也称为“dot-matches-all”或“DOTALL”模式,也允许它匹配换行符。

    【讨论】:

      【解决方案2】:

      没有办法用正则表达式“忽略”任何类型的字符。您可以忽略字母大小写,但仅此而已。

      您最好的选择是使用\s+,在您期望某种类型的空白处。 \s 类将匹配任何空格,包括换行符、回车符、制表符和空格,这将使您的正则表达式模式看起来更好。

      【讨论】:

        【解决方案3】:

        你需要制表符/换行符吗?您总是可以用空字符替换制表符/换行符来删除它们。

        string mystring = "\t\nhi\t\n";
        
        string mystring_notabs = mystring.Replace("\t",""); //remove tabs
        
        mystring = mystring_notabs.Replace("\n",""); //remove newline and copy back to original
        

        【讨论】:

          【解决方案4】:

          我遇到了多行 XML 值的问题。我想要描述字段中的数据,并且我不想更改我的 C# 代码以使用单行选项,因为我正在从数据库中动态读取正则表达式进行解析。这解决了我的问题,尤其是前面的 (?s):

           (?s)(?<=<description>).*(?=<\/description>)
          

          【讨论】:

            猜你喜欢
            • 2017-03-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-07-07
            • 1970-01-01
            • 1970-01-01
            • 2017-12-30
            • 1970-01-01
            相关资源
            最近更新 更多