基本上想象一下,如果我有这样的一行:
"Hello world
I am Lucas [help me]
Hi"
我希望re.split()
的结果为:
['Hello' 'world' '' 'I' 'am' 'Lucas' '[help me] '' 'Hi']
截至目前,我已尝试使用
re.split(r'\s+(?=[^()]*(?:\[|\<|$))', stringToSplit)
但我不确定如何添加&#39;&#39;作为换行符。我试过了:
result = re.split(r'\s|\n+(?=[^()]*(?:\[|\<|$))', input)
然而,这会导致[帮助我]的问题,因为它将其分成'[help' and 'me]'
。有没有解决这个问题?
答案 0 :(得分:2)
您可以使用匹配的方法提取方括号内的所有子字符串,或非空格块,或者在换行符之前使用空白字符
\[[^[]*]|\([^)]*\)|<[^>]*>|\S+|(?=\n)
请参阅regex demo。
<强>详情
\[[^]]*]
- [
后跟]
以外的任何0 +字符,然后是]
|
- 或\([^)]*\)
- (
后跟除)
以外的任何字符,然后)
|
- 或<[^>]*>
- <
后跟>
以外的任何0 +字符,然后是>
|
- 或\S+
- 一个或多个非空白字符|
- 或(?=\n)
- \n
换行符之前的空字符串。请参阅Python demo:
re.findall(r"\[[^[]*]|\([^)]*\)|<[^>]*>|\S+|(?=\n)", s)
# => ['Hello', 'world', '', 'I', 'am', 'Lucas', '[help me]', '(help me 2)', '<help me 3>', '', 'Hi']
答案 1 :(得分:0)
使用newer regex module,你可以相处:
import regex as re
string = """Hello world
I am Lucas [help me]
Hi"""
rx = re.compile(r'\[[^][]*\](*SKIP)(*FAIL)|(\s+)')
parts = rx.split(string)
print(parts)
# ['Hello', ' ', 'world', '\n', 'I', ' ', 'am', ' ', 'Lucas', ' ', '[help me]', '\n', 'Hi']
它匹配任何不需要的结构,例如[...]
,然后让它们失败。请参阅a demo on regex101.com。