我正在尝试处理一些推文,我试图将推文中的某些术语拆分如下:
word : DailyRX
final_word : Daily R X
word : AdeleOfficial
final_word : Adele Official
word : HMV
final_word : H M V
word : EPPGroup
final_word : E P P Group
word : BBCBreaking
final_word : B B C Breaking
word : BBCNews
final_word : B B C News
编辑 -
使用@ user2486495的解决方案,我能够获得我想要的输出,如上所述。这是解决方案:
newlist = [a for a in re.split(r'([A-Z][a-z]*)', word) if a]
replacement=""
for term in listnew:
replacement+=term+" "
tweet = tweet.replace(word,replacement)
现在我正在尝试一种方法来执行以下操作 -
理想情况下,我希望“BBCBreaking”分手为“BBC Breaking”,但我想不出办法做到这一点。所以我首先用如上所述的大写字符将其分解,然后我试图找到用空格分隔的所有首字母缩略词(即“B B C”)并将它们组合成一个没有空格的单词(即“BBC”)。有没有办法使用正则表达式?
编辑2 -
使用@ Hugh的答案解决了下面的问题,这也解决了数字,例如: “Oscars2013” - > “奥斯卡2013”
答案 0 :(得分:2)
怎么样
import re
splitter = re.compile('[A-Z]+(?![a-z])|[A-Z]?[a-z]+|[^A-Za-z \t\r\n]+').findall
fix_tweet = lambda t: ' '.join(splitter(t))
然后
fix_tweet('AdeleOfficial') # -> 'Adele Official'
fix_tweet('EPPGroup') # -> 'EPP Group'
正则表达式的解释:匹配
[A-Z]+(?![a-z])
一个或多个大写字母,后面跟不是小写字母[A-Z]?[a-z]+
0或1个大写字母后跟一个或多个小写字母[^A-Za-z \t\r\n]+
一个或多个非alpha,非空白字符答案 1 :(得分:1)
方法split()返回字符串中所有单词的列表,使用str作为分隔符(如果未指定则拆分所有空格),可选择将分割数限制为num。
str.split(str=" ", num=string.count(str))
<强>参数强>
str - 这是任何分隔符,默认情况下是空格。
num - 这是要行的行数。
返回值
此方法返回行列表。
例如
[a for a in re.split(r'([A-Z][a-z]*)', 'MgSO4') if a]
<强>输出强>
['Mg', u'S', u'O', u'4']
答案 2 :(得分:0)
使用此模式"\B[A-Z]"
并替换为" $0"
Demo