用于分隔折叠标题的正则表达式
Regex expression to separate collapsed title
第一次post。我有一段文本,其中很多标题大写的文本在没有空格的情况下被折叠。我试着:
a) 保留全文(不要松散任何单词),
b) 使用逻辑来分隔 'A',如 'A Way Forward',
c) 避免分隔首字母缩略词,例如 EPA、DOJ 等(它们已经全部大写)。
我的正则表达式代码非常接近,但它在单词的开头或结尾留下 'A':
f = "TheCuriousIncidentOfAManInAWhiteHouseAt1600PennsylvaniaAveAndTheEPA"
re.sub( r"([A-Z][a-z]|[A-Z][A-Z]|\d+)", r " \1", f).split()
输出:
['The', 'Curious', 'Incident', 'Of', 'AMan','In', 'AWhite','House', 'At', '1600', 'Pennsylvania', 'Ave', 'And', 'The', 'EPA']
问题输出如'AMan'、'AWhite'等
应该是:
['The', 'Curious', 'Incident', 'Of', 'A', 伙计','In','A',白','House','At','1600','Pennsylvania' , 'Ave', 'And', 'The', 'EPA']
谢谢
欢迎来到 Stack Overflow Greg。正则表达式的良好开端。
我会尝试这样的事情:
([A-Z]{2,}(?![a-z])|[a-zA-Z][a-z]*|[0-9]+)
分解,解释:
([A-Z]{2,}(?![a-z]) // 2 or more capital letters, not followed by a lowercase letter
| // OR
[a-zA-Z][a-z]* // Any letter, followed by any number of lowercase letters
| // OR
[0-9]+) // One or more digits
最好这样使用:
re.findall(r'([A-Z]{2,}(?![a-z])|[a-zA-Z][a-z]*|[0-9]+)', s)
Try it online(包含 \W*
用于格式化)
第一次post。我有一段文本,其中很多标题大写的文本在没有空格的情况下被折叠。我试着: a) 保留全文(不要松散任何单词), b) 使用逻辑来分隔 'A',如 'A Way Forward', c) 避免分隔首字母缩略词,例如 EPA、DOJ 等(它们已经全部大写)。
我的正则表达式代码非常接近,但它在单词的开头或结尾留下 'A':
f = "TheCuriousIncidentOfAManInAWhiteHouseAt1600PennsylvaniaAveAndTheEPA"
re.sub( r"([A-Z][a-z]|[A-Z][A-Z]|\d+)", r " \1", f).split()
输出:
['The', 'Curious', 'Incident', 'Of', 'AMan','In', 'AWhite','House', 'At', '1600', 'Pennsylvania', 'Ave', 'And', 'The', 'EPA']
问题输出如'AMan'、'AWhite'等
应该是:
['The', 'Curious', 'Incident', 'Of', 'A', 伙计','In','A',白','House','At','1600','Pennsylvania' , 'Ave', 'And', 'The', 'EPA']
谢谢
欢迎来到 Stack Overflow Greg。正则表达式的良好开端。
我会尝试这样的事情:
([A-Z]{2,}(?![a-z])|[a-zA-Z][a-z]*|[0-9]+)
分解,解释:
([A-Z]{2,}(?![a-z]) // 2 or more capital letters, not followed by a lowercase letter
| // OR
[a-zA-Z][a-z]* // Any letter, followed by any number of lowercase letters
| // OR
[0-9]+) // One or more digits
最好这样使用:
re.findall(r'([A-Z]{2,}(?![a-z])|[a-zA-Z][a-z]*|[0-9]+)', s)
Try it online(包含 \W*
用于格式化)