gpt4 book ai didi

python - 在 "Mr."或 "Mrs."之前分割字符串

转载 作者:行者123 更新时间:2023-11-30 23:13:08 25 4
gpt4 key购买 nike

我有一个文件,其中包含一个如下所示的字符串:

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

现在,我想用 Python 来拆分它,使其看起来像这样:

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

目前我正在使用以下内容:

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

这给了我:

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

我知道这可能非常简单,并且还阅读了我能找到的有关正则表达式和标题的所有线程,但似乎没有人遇到同样的问题。如果有人能指出我正确的方向并告诉我做错了什么,我会非常高兴(有一次,我花了一个小时盯着一个不起作用的代码片段,结果发现我只是忘记了一个 * )因为我很想了解正则表达式。

最佳答案

我建议您创建一个列表,其中包含可以首先按名称列出的所有可能标题:

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

然后,您可以使用它们为任何这些标题创建正则表达式,后跟一个空格。

>>> title_opt = "(?:(?:" + "|".join(titles) + ") )?"
'(?:(?:Mr\\.|Mrs\\.|Lady|Sir) )?'

然后使用这些标题和单词来查找所有名称和单词。

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

或者,根据您自己的方法,一旦获得了名称、单词和标题的列表,您就可以使用迭代器将标题连接到迭代器中的下一个单词。

>>> 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']

关于python - 在 "Mr."或 "Mrs."之前分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29489321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com