第一次发帖。我有一个文本,其中标题中的许多文本都折叠而没有空格。我试着: a)保留全文(不要遗漏任何单词), b)如“前进之路”中那样使用逻辑来分隔“ A”, c)避免分离首字母缩略词,例如EPA,DOJ等(已经大写)。
我的正则表达式代码非常接近,但是它在单词的开头或结尾都留下了“ A”:
f =“在宾夕法尼亚州白宫,一个人的好奇事件发生在1600年,宾夕法尼亚州Ave和TheEPA”
re.sub(r“([[AZ] [az] | [AZ] [AZ] | \ 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',Man','In','A',White' ,“房屋”,“在”,“ 1600”,“宾夕法尼亚州”,“ Ave”,“ And”,“ The”,“ EPA”]
谢谢
答案 0 :(得分:0)
欢迎使用堆栈溢出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*
用于格式化)