获取与正则表达式匹配的替换词 python
Fetch the substituted word matched with regex python
假设我们有一个字符串:“This is an example.It does not contain space after one sentence.
”
和一个匹配模式:“(\.|,|:|;|!|\)|\])(\s*)([a-zA-Z]*)
”
此模式匹配任何组合,其中标点符号后没有 space 或多个 space 可用。如果这些条件中的任何一个匹配,它将用
替换单个 space。此输出将是:This is an example. It does not contain space after one sentence.
(替换为 space)
我的问题是:我们知道 .It
是我们匹配的字符串及其索引位置。 但是我们如何才能获取到它所在位置的确切替换内容呢?我想获取那个. It
(点space)。
注意:
也请考虑一行中多个匹配的情况。
编辑:
输入:This is text.Another text.Next case
输出:[".Another",".Next"]
请使用下面的正则表达式
.*?(\.)\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']
您可以将所有单个字符的交替列表缩短为一个字符 class [.,:;!)|\]]
以匹配列出的字符之一。
您可以省略 (\s*)
周围的组,因为它将被替换为单个 space,因此您将有 2 个捕获组而不是 3 个。
如果后面至少应该有一个字符,您可以使用 +
作为量词。如果您使用星号,它将匹配 0+ 次。如果字符串末尾有一个点,后面没有任何内容,则只需在字符串末尾添加一个 space。
([.,:;!)|\]])\s*([a-zA-Z]+)
要查看被替换的值是什么,您可以将第 1 组和第 2 组用 space 连接起来。 re.findall 将 return 包含第 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']
假设我们有一个字符串:“This is an example.It does not contain space after one sentence.
”
和一个匹配模式:“(\.|,|:|;|!|\)|\])(\s*)([a-zA-Z]*)
”
此模式匹配任何组合,其中标点符号后没有 space 或多个 space 可用。如果这些条件中的任何一个匹配,它将用
替换单个 space。此输出将是:This is an example. It does not contain space after one sentence.
(替换为 space)
我的问题是:我们知道 .It
是我们匹配的字符串及其索引位置。 但是我们如何才能获取到它所在位置的确切替换内容呢?我想获取那个. It
(点space)。
注意: 也请考虑一行中多个匹配的情况。
编辑:
输入:This is text.Another text.Next case
输出:[".Another",".Next"]
请使用下面的正则表达式
.*?(\.)\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']
您可以将所有单个字符的交替列表缩短为一个字符 class [.,:;!)|\]]
以匹配列出的字符之一。
您可以省略 (\s*)
周围的组,因为它将被替换为单个 space,因此您将有 2 个捕获组而不是 3 个。
如果后面至少应该有一个字符,您可以使用 +
作为量词。如果您使用星号,它将匹配 0+ 次。如果字符串末尾有一个点,后面没有任何内容,则只需在字符串末尾添加一个 space。
([.,:;!)|\]])\s*([a-zA-Z]+)
要查看被替换的值是什么,您可以将第 1 组和第 2 组用 space 连接起来。 re.findall 将 return 包含第 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']