我被困一段时间开发一个正则表达式从以下任一字符串中提取路径:
1. "life:living:fast"
2. "life"
3. ":life"
4. ":life:"
我要使用这些正则表达式:
(.{3,}):", ":(.{3,}):", ":(.{3,})", "(.{3,})
第一场比赛就是我所需要的。即每个所需的结果应该是字生命所在的字符串。认为生命是一个变量
但由于某些原因,将这些单独的正则表达式组合在一起是一种痛苦:如果我按顺序排除它们,我会提取“生命”这个词。但是我无法将它们组合成一个。
感谢您的努力。
答案 0 :(得分:2)
如果你想要第一个带有冒号的life
,你可以使用它:
^:?(?:.{3,}?)(?::|$)
如果您更喜欢没有冒号的第一个life
,请切换到:
((?<=^:)|^)([^:]{3,}?)(?=:|$)
工作原理#1:^:?(?:.{3,}?)(?::|$)
^:?
,在字符串的开头,我们匹配一个可选的冒号(?:.{3,}?)
懒惰地将三个或更多个字符匹配到... (?::|$)
冒号或字符串的结尾 工作原理#1:((?<=^:)|^)([^:]{3,}?)(?=:|$)
((?<=^:)|^)
确保我们位于字符串的开头,或者紧跟字符串开头后的冒号([^:]{3,}?)
懒惰地匹配非冒号的字符... (?=:|$)
可以断言后面的内容是冒号或字符串的结尾。答案 1 :(得分:2)
您可以使用此模式,因为您正在寻找第一个单词:
(?<=^:?)[^:]{3,}
请注意,此模式不会检查所有字符串。