![](/img/trans.png)
[英]Regex in Python: splitting on whitespace character in between two words that start with a capital letter
[英]Python splitting a phrase into words if there is a capital letter, but not if there is a comma between them
我正在尝试将一个短语拆分成单词。
输入是:
Varie Tutto l'anno Nessuna Triennale,Magistrale Italia Alta
预期 output 是:
['Varie ', "Tutto l'anno ", 'Nessuna ', 'Triennale, Magistrale ', 'Italia ', 'Alta']
当有大写字母时,我成功地将短语拆分为单词,但是我意识到其中一些之间有一个逗号(实际上我需要将它们放在一起)所以我想排除这种情况下的拆分。 我刚开始接触这类东西,这个 re.split function 真的很混乱。
我尝试了以下方法:
re.split('(?=[A-Z])+|[,]',text )
然而,这并不完全符合我的要求,因为它在遇到逗号时也会分开,但我正试图做相反的事情。
我怎样才能做到这一点?
TL;DR:按空间拆分并环顾四周: re.compile(r'(?<,?) (.=[AZ])').split(text)
,第 4 节中的详细信息。
在 regex101 或 regexpl.net(具有 Python 风格)上尝试您的正则表达式。
看演示:
\b(?<!,)[A-Z]
用途:
\b
字边界(空格或逗号或点等)(?<,,)
否定后视:以下不应以逗号开头[AZ]
字符范围的大写字母 (AZ)在 Python:
import re
text = "Varie Tutto l'anno Nessuna Triennale,Magistrale Italia Alta"
words = re.split(r'\b(?<!,)[A-Z]', text)
print(words)
印刷:
['', 'arie ', "utto l'anno ", 'essuna ', 'riennale,Magistrale ', 'talia ', 'lta']
好的,结果中有一些空字符串。
哎呀,大写字母被吞没了……让我们修理分离器。 它不应包括 [AZ] 作为分隔符:
re.findall(r'\b(?<!,)[A-Z][^A-Z]*', text)
印刷:
['Varie ', "Tutto l'anno ", 'Nessuna ', 'Triennale,', 'Italia ', 'Alta']
但在逗号后全部吞下(例如,结果Triennale,
中缺少Magistrale
,而不是预期的Triennale,Magistrale
)。
同时使用 lookbehind 和 lookahead 以及 NUL special-char \0
作为分隔符。
re.sub(r'(?<!,)\b(?=[A-Z])', '\0', text).split('\0')
印刷:
['', 'Varie ', "Tutto l'anno ", 'Nessuna ', 'Triennale,Magistrale ', 'Italia ', 'Alta']
结果中仍然有一些空字符串。
re.compile(r'(?<!,) (?=[A-Z])').split(text)
印刷:
['Varie', "Tutto l'anno", 'Nessuna', 'Triennale,Magistrale', 'Italia', 'Alta']
现在所有空格都被吞没了(例如,结果是Varie
而不是Varie
),因为这是分隔符。
我坚信我提出的不是最好的主意,而是解决您问题的方法。 这就是我想出的:
import re
input = "Varie Tutto l'anno Nessuna Triennale,Magistrale Italia Alta"
output = re.sub('(\s|^)([A-Z][^A-Z]*)($|\s)', r'\n\2\n',input)
output = re.split("\n", output)
output = list(filter(None, output))
['Varie', "Tutto l'anno", 'Nessuna', 'Triennale,Magistrale', 'Italia', 'Alta']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.