我已经被困了一段时间,开发一个正则表达式来从以下字符串中提取路径:
1. "life:living:fast"
2. "life"
3. ":life"
4. ":life:"
我有这些正则表达式可以使用:
(.{3,}):", ":(.{3,}):", ":(.{3,})", "(.{3,})
第一场比赛就是我所需要的。即每个期望的结果应该是位于单词 life 所在位置的字符串。将生命视为一个变量
但由于某种原因,组合这些单独的正则表达式是一种痛苦:如果我按顺序执行它们,我会提取“生命”一词。但是我无法将它们合二为一。
我很欣赏你的努力。
最佳答案
如果你想要第一个life
与冒号一起,您可以使用:
^:?(?:.{3,}?)(?::|$)
如果您喜欢第一个 life
没有冒号,切换到这个:
((?<=^:)|^)([^:]{3,}?)(?=:|$)
工作原理#1:^:?(?:.{3,}?)(?::|$)
- 与
^:?
,在字符串的开头,我们匹配一个可选的冒号 -
(?:.{3,}?)
延迟匹配三个或更多字符,最多... -
(?::|$)
冒号或字符串结尾
工作原理#1:((?<=^:)|^)([^:]{3,}?)(?=:|$)
-
((?<=^:)|^)
确保我们要么位于字符串的开头,要么位于字符串开头后的冒号之后 -
([^:]{3,}?)
延迟匹配不是冒号的字符... - 直到前瞻
(?=:|$)
的点可以断言后面是冒号或字符串结尾。
关于java - 组合多个正则表达式从 : separated string 中提取子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24304053/