【问题标题】:RegEx match text in between delimiters正则表达式匹配分隔符之间的文本
【发布时间】:2011-04-11 11:46:32
【问题描述】:

我需要一个在分隔符内提取文本的正则表达式,但我需要 提取分隔符 [DATA n] 和 [END DATA] 内的值时遇到问题

这是我的正则表达式

(?<=\[DATA\s+\d+\]).*(?=\[END DATA\])

这是我要匹配的示例数据

这里有一些文字

[DATA 1]
data one 
some more data
[END DATA]
[DATA 2]
data two
more data
data
[END DATA]
[DATA n]
more data 
data 
[END DATA]

【问题讨论】:

    标签: regex


    【解决方案1】:

    当您并不真正需要正则表达式功能时,您似乎正在使用它们,例如后向和前瞻。试试:

    \[DATA\s+\d+\](.*?)\[END DATA\]
    

    这个正则表达式中只有一个捕获组(.*?)。使用此功能后,您要查找的结果应该在捕获组 1 中。

    还请注意,我使用了非贪婪的 .*? 匹配,它将匹配到 first 以下 [END DATA] 实例。如果没有这个,如果您只使用.*,您将捕获到last [END DATA] 之前的所有内容。

    【讨论】:

      【解决方案2】:

      在正则表达式中,] 之间的 [ 文本称为字符类,正则表达式引擎只会匹配括号之间的 一个 字符。你只需要加上反斜杠就可以了:

      (?<=\[DATA\s+\d+\]).*(?=\[END DATA\])
      

      【讨论】:

      • 对不起,我编辑了我的帖子,它应该包含用于括号的 \。谢谢。但它仍然没有提取分隔符内的数据,顺便说一句我正在使用 expresso
      • 这对我来说非常有用 (?
      【解决方案3】:

      点特殊字符默认不匹配换行符。确保您使用 单行修饰符 来实现正则表达式,或使用 [\S\s]*? 而不是 .*?

      详情请参阅http://www.regular-expressions.info/modifiers.htmlhttp://www.regular-expressions.info/dot.html

      【讨论】:

      • 最好在前面使用(?s)指定单行修饰符。
      • 是的,这绝对是一个选择。我不认为所有正则表达式实现都支持这一点。据我所知,Javascript 不支持这种语法。这个问题并不具体,所以我只是提出了一些应该在大多数(如果不是全部)情况下都有效的方法。
      • 我想提取分隔符内的所有数据,它应该是多行的,是的,我同意。*?不适用。
      【解决方案4】:

      使用 \ 转义字符。

      \[DATA\s\d\]+([^\[]+)\[[^\]]+\]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-29
        • 1970-01-01
        • 2023-04-10
        • 2017-02-16
        • 1970-01-01
        • 1970-01-01
        • 2019-03-21
        • 1970-01-01
        相关资源
        最近更新 更多