【问题标题】:Case analysis with REGEX使用 REGEX 进行案例分析
【发布时间】:2021-04-23 13:43:05
【问题描述】:

我有一些类似的数据

small_animal/Mouse
BigAnimal:Elephant
Not an animal.

我想要得到的是:

Mouse
Elephant
Not an animal.

因此,我需要一个搜索/: 的正则表达式,如下所示:如果找到其中一个,则取该字符后面的文本。如果/: 都不存在,则取整个字符串。

我尝试了很多。例如,这适用于鼠标和大象,但不适用于第三行:

(?<=:)[^:]*|(?<=/)[^/]*

这总是会给出完整的字符串...

(?<=:)[^:]*|(?<=/)[^/]*|^.*$

我的头在燃烧^^ 也许,有人可以帮忙吗? :) 非常感谢!

编辑:

@The fourth bird 为单个字符提供了一个很好的解决方案。但是如果我想搜索类似

的字符串怎么办?
animal::Dog
Another123Cat
Not an animal.

如何拆分::123

【问题讨论】:

    标签: regex if-statement case pcre


    【解决方案1】:

    你可能会使用

    ^(?:[^:/]*[:/])?\K.+
    
    • ^ 字符串开始
    • (?:[^:/]*[:/])? 可以选择匹配除:/ 之外的任何字符,直到匹配:/
    • \K 忘记到目前为止匹配的内容
    • .+ 匹配任意字符 1+ 次

    regex demo

    如果不想换行,可以用[^:/\r\n]*扩展字符类

    另一个选项可能是使用替代

    ^[^:/]*[:/]\K.+|.+
    

    Regex demo

    或者也许通过匹配您想要省略的内容来使用 SKIP FAIL 方法

    ^[^:/]*[:/](*SKIP)(*F)|.+
    

    Regex demo


    如果你想使用多个字符,你也可以使用

    ^(?:(?:(?!123|::|[:/]).)*+(?:123|::|[:/]))?\K.+
    

    Regex demo

    【讨论】:

    • 非常感谢,这正在工作! :) 但我有一个后续问题,请参阅我的编辑。也许您也可以在这里帮助您提高正则表达式技能?
    • @Max16hr 喜欢这个? ^(?:(?:(?!::|123|[:/]).)*(?:::|123|[:/]))?\K.+regex101.com/r/MZl40C/1
    猜你喜欢
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 2011-04-25
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多