【问题标题】:Regex between two characters - Matched between many same characters两个字符之间的正则表达式 - 在许多相同的字符之间匹配
【发布时间】:2022-01-08 12:34:46
【问题描述】:

我有一个字符串

[ 14.21 | | Pobiedziska Letnisko 2 11.16 | 1 ]

我需要第二个“|”之间的值字符和数字“2”或“1” 只有这部分字符串没有“|”字符和没有数字。 我正在尝试这种模式

(?<=\|).+?(?=(1|2))

但是正如你所看到的,这种模式并不好,因为匹配以第一个字符“|”开头我需要从第二个“|”开始字符。

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    您可以在第二个管道字符匹配之后使用捕获组,直到第一次出现 1 或 2。

    请注意,.+? 也可以匹配 |,因此如果 1 或 2 在右侧的管道字符之后,它将与 | 交叉。

    ^[^|]*\|[^|]*\|(.+?)\b[21]\b
    

    Regex demo

    如果您不想跨越换行符或管道字符,您可以扩展否定字符类,如 ^[^|\r\n]*

    在您的问题中使用环视的另一种选择 negated character class 不跨越管道字符:

    (?<=^[^|]*\|[^|]*\|)[^|]+(?=\b[21]\b)
    
    • (?&lt;=^[^|]*\|[^|]*\|) 在当前位置左侧断言 2 个管道字符
    • [^|]+ 匹配除| 之外的任何字符
    • (?=\b[21]\b) 正向前瞻,向右断言 2 或 1

    .NET Regex demo

    【讨论】:

    • 是的,我需要第二个正则表达式。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多