在正则表达式匹配的字符中仅捕获相同的字符

时间:2019-04-18 15:21:55

标签: python regex

我想匹配所有错误使用点的情况,如下所示:

我的朋友饿了。我很开心

目标是获得:

我的朋友饿了。我很开心

如何使用Regex和Python做到这一点?

我能够使用以下方法匹配正确的案例:

indeces=[i for i, x in enumerate(incd) if x == w1 or x == w2]

我也想替换错误的内容。正确的代码(我尝试使用re.sub,但是使用先前的正则表达式,它也替换了圆点后单词的第一个字母)

建议?

2 个答案:

答案 0 :(得分:1)

您可以做的是匹配一个空白字符和一个点,并使用正向前行(?=[a-zA-Z])断言右边的是a-zA-Z并用点和空格代替:

\s\.(?=[a-zA-Z])

Regex demo | Python demo

例如

import re

regex = r"\s\.(?=[a-zA-Z])"
result = re.sub(regex, ". ", "My friend is hungry .I am happy")

if result:
    print (result) # My friend is hungry. I am happy

或者如Tim Biegeleisen在评论中所建议,一个更通用的选择是:

\s+\.(?=\w)

Regex demo

答案 1 :(得分:0)

尝试一下:

import re

test_str = "My friend is hungry .I am happy"
regex = r"\s+\." # add `(?<=\w)` for lookahead as indicated by other answer
subst = ". "

result = re.sub(regex, subst, test_str, 0, re.MULTILINE)
if result:
    print (result)  

Demo