获取与正则表达式python匹配的替换词

2024-04-27 00:58:31 发布

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

假设我们有一个字符串:“This is an example.It does not contain space after one sentence.” 和匹配模式:“(\.|,|:|;|!|\)|\])(\s*)([a-zA-Z]*)” 此模式适用于标点符号后没有空格或有多个空格可用的任何组合。如果这些条件中的任何一个匹配,它将用\1 \3替换单个空格。这个的输出将是:This is an example. It does not contain space after one sentence.(用空格代替)

我的问题是:.It是我们匹配的字符串及其索引位置但是我们怎样才能在它的位置上得到确切的替代品呢?我想取那个. It(点空格它)。

注: 请同时考虑一行中多个匹配的情况。

编辑:

输入:This is text.Another text.Next case

输出:[“.other”,“.Next”]


Tags: 字符串anisexample模式notitspace
2条回答

请使用下面的正则表达式

.*?(\.)\s*(\w*)\s

代码

import re
a="This is text.Another text.Next case"
print([i+" "+j for (i,j) in re.findall(".*?(\.)\s*(\w*)\s",a)])

输出

['. Another', '. Next']

您可以将列出所有单个字符的替换项缩短为字符类[.,:;!)|\]],以匹配列出的字符之一

您可以省略(\s*)周围的组,因为它将被替换为一个空格,因此您将有2个捕获组,而不是3个

如果后面至少有一个字符,可以使用+作为量词。如果您使用asterix,它将匹配0+次。如果字符串末尾有一个点,没有任何后续内容,则只需在字符串末尾添加一个空格

([.,:;!)|\]])\s*([a-zA-Z]+)

Regex demoPython demo

要查看被替换的值,可以在组1和组2之间连接一个空格re.findall将返回包含组1和组2的值的元组列表

比如说

import re

regex = r"([.,:;!)|\]])\s*([a-zA-Z]+)"
s = "This is text.Another text.Next case"
print(list(map(lambda x: f"{x[0]} {x[1]}", re.findall(regex, s))))

输出

['. Another', '. Next']

相关问题 更多 >