"分割 string 前的 "Mr." 或 "Mrs."

2024-09-28 21:56:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含如下字符串的文件:

"TextMr. XxxxxMrs. YyyyyMrs. ZzzzzTextWordLady ZzzzzMr. Xxxxx"

现在,我想用Python将其拆分为:

^{pr2}$

目前我使用的是:

test2 = re.sub( r"([A-Z])", r" \1", data).split()

这给了我:

['Text', 'Mr.', 'Xxxxx', 'Mrs.', 'Yyyyy', 'Mrs.', 'Zzzzz', 'Text', 'Word', 'Lady', 'Zzzzz', 'Mr.', 'Xxxxx']

我知道这可能很简单,我也读过所有关于regex和titles的帖子,但似乎没有人有同样的问题。如果有人能给我指出正确的方向,告诉我哪里做错了(有一次,我花了一个小时盯着一个代码片段,结果发现我只是忘了一个*),因为我很想理解regex。在


Tags: 文件字符串textregexmrxxxxxtest2mrs
2条回答
(.+?)(?=Mr\.|Mrs\.|$|(?<! )[A-Z])

试试看这个。看到了吗演示。抓住抓捕。在

https://regex101.com/r/sJ9gM7/59#python

^{pr2}$

我建议您创建一个列表,列出所有可能的标题,这些标题可以先按名称排序:

>>> titles = "Mr\. Mrs\. Lady Sir".split()
['Mr\\.', 'Mrs\\.', 'Lady', 'Sir']

然后,您可以使用它们为这些标题创建regex,后跟一个空格。在

^{pr2}$

然后用这些标题加上一个单词来找出所有的名字和单词。在

>>> re.findall(title_opt + "[A-Z][a-z]+", text)
['Text', 'Mr. Xxxxx', 'Mrs. Yyyyy', 'Mrs. Zzzzz', 'Text', 'Word', 'Lady Zzzzz', 'Mr. Xxxxx']

或者,根据您自己的方法,一旦您有了名称、单词和标题的列表,就可以使用迭代器将标题与迭代器中的next单词连接起来。在

>>> names = ['Text', 'Mr.', 'Xxxxx', 'Mrs.', 'Yyyyy', 'Mrs.', 'Zzzzz', 'Text', 'Word', 'Lady', 'Zzzzz', 'Mr.', 'Xxxxx']
>>> titles = set("Mr. Mrs. Lady Sir".split())
>>> iterator = iter(names)
>>> [s if s not in titles else s + " " + next(iterator) for s in iterator]
['Text', 'Mr. Xxxxx', 'Mrs. Yyyyy', 'Mrs. Zzzzz', 'Text', 'Word', 'Lady Zzzzz', 'Mr. Xxxxx']

相关问题 更多 >