正则表达式将主题标签拆分为单词



我正在尝试提出一个正则表达式,它将正确地将主题标签拆分为其单词。例如:

XP => XP
ACar => 一辆车
好车 => 好车
曾经的爱 => 从前
爱XP => 爱 XP 苹果VS XP => 苹果VS XP

詹姆斯邦德007 => 詹姆斯邦德 007

编辑: 我试过了

expanded = ' '.join(re.findall(r"[A-Z][^A-Z]*", self.text))

解决上述所有用例的更强大的方法是什么?

你可以简单地通过这个表达式来做到这一点,它完全足够了:

expanded = " ".join([a for a in re.split('([A-Z][a-z]+)', i) if a])

它给出以下结果:

XP
A Car
Good Car
Once Upon A Time
Love XP
Apple Vs XP
James Bond 007

希望这是有帮助的。

您可以定义几种模式来匹配被视为单独单词的内容 - 大写字符后跟一系列小写字符、一系列数字、一系列不后跟小写字符的大写字符等 - 然后只需在字符串上循环它:

import re
pattern = re.compile(r"[A-Z][a-z]+|d+|[A-Z]+(?![a-z])")
def split_hashtag(tag):
return pattern.findall(tag)

如果您使用代码对其进行测试:

test_tags = ["XP", "ACar", "GoodCar", "OnceUponATime", "LoveXP", "AppleVsXP", "JamesBond007"]
for tag in test_tags:
print("{} => {}".format(tag, " ".join(split_hashtag(tag))))

你会得到:

经验值 => 经验值 ACar => 一辆车 好车=>好车 OnceUponATime => OnceUponA'ime 爱经验 => 爱经验 AppleVsXP => Apple Vs XP 詹姆斯邦德007 => 詹姆斯邦德007

最新更新