【问题标题】:Fetch the substituted word matched with regex python获取与正则表达式 python 匹配的替换词
【发布时间】:2020-09-01 12:47:19
【问题描述】:

假设我们有一个字符串:“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(点空间 It)。

注意: 还请考虑在一行中有多个匹配项的情况。

编辑:

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

输出:[".另一个",".下一个"]

【问题讨论】:

  • 检查this regex demo
  • @Liju 请检查编辑。
  • 请在下方查看我的回答

标签: python regex substitution punctuation


【解决方案1】:

请使用下面的正则表达式

.*?(\.)\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']

【讨论】:

    【解决方案2】:

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

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

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

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

    Regex demo | Python 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']
    

    【讨论】:

      猜你喜欢
      • 2021-04-10
      • 2015-03-06
      • 1970-01-01
      • 2012-05-16
      • 2014-05-12
      • 2022-08-10
      • 2022-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多