所以我想按空格分割一个字符串,除非该部分字符串是感叹号。
样品:
ABC DEF !GHI JKL MNO! PQR
会变成:
["ABC", "DEF", "GHI JKL MNO", "PQR"]
目前,这是我的正则表达式(我使用regex101.com进行了检查并且它有效)
[^\s]*![^!]*![^\s]*|[^\s!!]+
我的拆分代码是
sample = "ABC DEF !GHI JKL MNO! PQR"
print(sample.split(r"[^\s]*![^!]*![^\s]*|[^\s!!]+").strip("!"))
答案 0 :(得分:3)
您可以使用
匹配预期的子字符串res = re.findall(r'![^!]*!|\S+', s)
请参阅regex demo。
<强>详情
![^!]*!
- 匹配!
,然后匹配!
以外的任何0 +字符,再次匹配!
|
- 或\S+
- 1 +非空白字符。import re
rx = r"![^!]*!|\S+"
s = "ABC DEF !GHI JKL MNO! PQR"
print(re.findall(rx, s))
# => ['ABC', 'DEF', '!GHI JKL MNO!', 'PQR']
答案 1 :(得分:1)
我会这样做:
def splitIt(sample):
exclamation = False
result = []
for i in sample:
if i == " ":
if exclamation == False:
result.append("")
else:
pass
elif i == "!":
if not exclamation:
exclamation = True
else:
exclamation = False
else:
result[-1] += i
return result