如何解决获取与正则表达式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
输出:[“。另一个”,“。下一个”]
解决方法
请在正则表达式下面使用
.*?(\.)\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个。
如果后面至少应包含一个字符,则可以使用+
作为量词。如果您使用星号,它将匹配0+次。如果字符串末尾有一个点,但后面没有任何内容,则只需在字符串末尾添加一个空格。
([.,:;!)|\]])\s*([a-zA-Z]+)
要查看替换后的值是什么,可以将组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']
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。