Python 用点替换缩略语列表?

Python 用点替换缩略语列表?,python,regex,python-3.x,Python,Regex,Python 3.x,我试图删除缩写列表中的点,这样它们就不会混淆句子标记器。这应该是非常简单的。不知道为什么我的代码不起作用 请在下面找到我的代码: abbrevs = [ "No.", "U.S.", "Mses.", "B.S.", "B.A.", "D.C.", "B.Tech.", "Pte.", "Mr.", "O.E.M.", "I.R.S", "sq.", "Reg.", "S-K." ] def replace_abbrev(abbrs, text): re_abbrs

我试图删除缩写列表中的点,这样它们就不会混淆句子标记器。这应该是非常简单的。不知道为什么我的代码不起作用

请在下面找到我的代码:

abbrevs = [
    "No.", "U.S.", "Mses.", "B.S.", "B.A.", "D.C.", "B.Tech.", "Pte.", "Mr.", "O.E.M.",
    "I.R.S", "sq.", "Reg.", "S-K."
]



def replace_abbrev(abbrs, text):
    re_abbrs = [r"\b" + re.escape(a) + r"\b" for a in abbrs]

    abbr_no_dot = [a.replace(".", "") for a in abbrs]

    pattern_zip = zip(re_abbrs, abbr_no_dot)

    for p in pattern_zip:
        text = re.sub(p[0], p[1], text)

    return text

text = "Test No. U.S. Mses. B.S. Test"

text = replace_abbrev(abbrevs, text)

print(text)
结果如下。什么也没发生。怎么了?谢谢

 Test No. U.S. Mses. B.S. Test
您需要使用它。在..之后没有\b。这将提供正确的输出

Test No US Mses BS Test

您可以使用,而且不需要re,即使它是一个很棒的库

from operator import methodcaller

' '.join(map(methodcaller('replace', '.', ''), abbrevs))
#No US Mses BS BA DC BTech Pte Mr OEM IRS sq Reg S-K

re_abbrs=[r\b+re.escapea+r\b for a in abbrs]行的作用是什么?因为删除它可以使它在这个测试用例中工作!我想匹配整个单词,所以我添加了单词边界。你只是想去掉所有句点吗?是的,这就是我要做的。在re.escapeat之后删除“\b”。非常感谢。我已经花了一个多小时试图找出答案。删除第二个r\b将匹配类似于U.S.A的模式。我将其更改为r\b+re.escapea+r?=\S+。对结果非常满意。谢谢您指出这一点。@VictorWang如果最后一个单词以结尾,您可能需要使用r\b+re.escapea+r?=?:\s+|$。
from operator import methodcaller

' '.join(map(methodcaller('replace', '.', ''), abbrevs))
#No US Mses BS BA DC BTech Pte Mr OEM IRS sq Reg S-K