采用以下正则表达式:/^[^abc]/。这将匹配字符串开头的任何单个字符,a、b或c除外。
如果在其后面添加*–/^[^abc]*/–正则表达式将继续向结果中添加每个后续字符,直到它满足a、b或c。
例如,对于源字符串“qwerty qwerty whatever abc hello”,表达式将匹配到“qwerty-qwerty wh”。
但如果我希望匹配的字符串是“qwerty qwerty whatever”呢?
换句话说,我如何将所有内容都匹配到(但不包括)精确的序列“abc”?
采用以下正则表达式:/^[^abc]/。这将匹配字符串开头的任何单个字符,a、b或c除外。
如果在其后面添加*–/^[^abc]*/–正则表达式将继续向结果中添加每个后续字符,直到它满足a、b或c。
例如,对于源字符串“qwerty qwerty whatever abc hello”,表达式将匹配到“qwerty-qwerty wh”。
但如果我希望匹配的字符串是“qwerty qwerty whatever”呢?
换句话说,我如何将所有内容都匹配到(但不包括)精确的序列“abc”?
当前回答
你需要看看断言,比如.+?(?=abc)。
请参阅:零长度断言的前瞻性和滞后性
请注意[abc]与abc不同。在括号内,它不是一个字符串-每个字符只是一种可能性。在括号外,它成为字符串。
其他回答
我想将sidyll的答案扩展到正则表达式的不区分大小写版本。
如果你想匹配abc/abc/abc。。。不区分大小写(我需要这样做),使用以下正则表达式。
.+?(?=(?i)abc)
说明:
(?i) - This will make the following abc match case insensitively.
正则表达式的另一种解释与sidyll指出的相同。
你需要看看断言,比如.+?(?=abc)。
请参阅:零长度断言的前瞻性和滞后性
请注意[abc]与abc不同。在括号内,它不是一个字符串-每个字符只是一种可能性。在括号外,它成为字符串。
在Python中:
.+?(?=abc)适用于单线情况。
[^]+?(?=abc)不起作用,因为python无法将[^]识别为有效的正则表达式。要使多行匹配工作,需要使用re.DOTALL选项,例如:
re.findall('.+?(?=abc)', data, re.DOTALL)
匹配从开始到“在ABC之前”或“行结束”(如果没有ABC)
(1) 如果字符串在任何地方都不包含ABC,则匹配整个字符串
(2) 与空字符串不匹配
(不检查带换行符的字符串)
^.+?(?=ABC|$)
正如Jared Ng和@Issun所指出的,解决这种正则表达式的关键是“匹配某个单词或子字符串之前的所有内容”或“匹配某一单词或子串之后的所有内容。”。在这里阅读更多关于他们的信息。
在您的特定情况下,可以通过积极的展望来解决:.+?(?=abc)
一幅画胜过千言万语。请参见屏幕截图中的详细说明。