gpt4 book ai didi

用于多个点和单个点的 Python 正则表达式

转载 作者:太空宇宙 更新时间:2023-11-04 09:30:48 25 4
gpt4 key购买 nike

我目前正在尝试清理一个 1 克的文件。部分词语如下:

  1. word - 基本单词,经典格
  2. word. - 带点的基本单词
  3. w.s.f.w. - (word stands for word) - 正确的首字母缩略词
  4. w.s.f.w - 首字母缩写词不正确(缺少最后一个点)

我当前的实现考虑了两个不同的 RegEx,因为我还没有成功地将它们合并为一个。第一个 RegEx 识别基本单词:

find_word_pattern = re.compile(r'[A-Za-z]', flags=re.UNICODE)

第二个用于识别首字母缩略词:

find_acronym_pattern = re.compile(r'([A-Za-z]+(?:\.))', flags=re.UNICODE)

假设我有一个 input_word 作为字符序列。输出是通过以下方式获得的:

"".join(re.findall(pattern, input_word))

然后我根据长度选择要使用的输出:输出越长越好。我的策略适用于案例号。 1 两个模式返回相同的长度。

案件编号2 是有问题的,因为我的方法生成 word.(带点),但我需要它返回 word(不带点)。目前,案件的判决有利于生成更长序列的 find_acronym_pattern

案件编号3 按预期工作。

案件编号4:find_acronym_pattern 错过了最后一个字符,这意味着它生成 w.s.f.find_word_pattern 生成 wsfw

我正在寻找一个 RegEx(最好是一个而不是当前使用的两个):

  1. 给定 word 返回 word

  2. 给定 word. 返回 word

  3. 给定 w.s.f.w. 返回 w.s.f.w.

  4. 给定 w.s.f.w 返回 w.s.f.w.

  5. 给定 m.in 返回 m.in.

最佳答案

正则表达式永远不会返回不存在的内容,因此您可以忘记要求 5。您可以做的是始终删除最后一个句点,如果结果包含嵌入的句点,则将其添加回来。这将为您提供所需的结果,而且非常简单:

found = re.findall(r"\w+(?:\.\w+)*", input_word)[0]
if "." in found:
found += "."

如您所见,我匹配一个词加上任意数量的“.part”后缀。与您的版本一样,这不仅匹配单个字母的首字母缩略词,还匹配较长的缩写词,例如 Ph.D.、Prof.Dr. 或其他。

关于用于多个点和单个点的 Python 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55882855/

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