在Python中查找和组合首字母缩略词

时间:2013-12-07 15:16:26

标签: python regex string twitter

我正在尝试处理一些推文,我试图将推文中的某些术语拆分如下:

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”​​

3 个答案:

答案 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