你的
[^\s"'();|&]+
图案部分抓住
\
然后
\\.
无法正确匹配转义字符。
您可以使用
(?:\\.|[^\s"'();|&\\])+
请参见
regex demo
这里,模式匹配任何转义字符的1个或多个重复(如果使用
re.DOTALL
或
re.S
,甚至包括换行符),或除空格以外的任何字符,
"
,则,
'
,则,
(
,则,
)
,则,
;
,则,
|
,则,
&
或
\
。
Python demo
:
import re
strs = ['hello-world', r'hello;world ', r'he(llo)(w|o rld)', r'hello\;world',r'hello\-world ']
for s in strs:
res = re.findall(r'''(?:\\.|[^\s"'();|&\\])+''', s)
for val in res:
print(val)
print("-------------")
输出:
hello-world
-------------
hello
world
-------------
he
llo
w
o
rld
-------------
hello\;world
-------------
hello\-world
-------------