使用 REGEX 进行案例分析

Case analysis with REGEX

我有一些数据,例如

small_animal/Mouse
BigAnimal:Elephant
Not an animal.

我想得到的是:

Mouse
Elephant
Not an animal.

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

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

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

这将始终给出完整的字符串...

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

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

编辑:

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

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

如何拆分 ::123

你可能会用到

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

regex demo

如果不想跨行,可以将字符class扩展为[^:/\r\n]*

另一种选择可能是使用交替

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

Regex demo

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

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

Regex demo


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

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

Regex demo