首页 > 解决方案 > 正则表达式函数用于带有逗号和文本的句子,甚至可能延伸到一行

问题描述

我对 Python 很陌生,我刚开始学习正则表达式。我正在尝试定义一个函数,该函数将字符串作为输入返回出现的次数,其中存在类似',这是我的正则表达式实践,'的实例。这里的文本在逗号之间,但在两个逗号之后都有一个空格。这种情况有可能发生在 2 行以上。但我只想计算它是否在一行中。

示例文件https://regex101.com/r/922t4S/1

在这个示例文件中,有一个实例,例如',几乎打盹,'。如果句子有可能延伸到新行,我该如何为此类语句编写正则表达式。我怎么数他们?

这是我的代码:

def count(filename):
    f = open(filename, 'r')
    x = f.readlines()
#   pattern=re.compile(",\s+\w,")
#   pattern=re.compile(',\s+[a-zA-Z]*\s*,')
    l=0
    for i in x:
        k=re.findall(pattern, i)
        l=l+len(k)
    return l

我尝试了两种方法,但当我尝试在正则表达式测试器上进行可视化时,这两种方法都没有意义。请帮忙。

标签: pythonregex

解决方案


您可以使用正则表达式

,\h*.+?\h*,

此正则表达式的重要特征:

  • \h匹配水平空间,因此它不包括换行符
  • 使用量词*\h因为文本和逗号之间可以有任意数量(包括 0)的空格
  • .匹配所有非换行符,而不是\w你使用的,它只匹配[a-zA-Z0-9_]不包括空格的 。
  • +?意思是“懒惰地匹配”。

编辑:

刚刚意识到您正在逐行读取文件并逐行应用正则表达式,因此即使您使用\s. 尽管如此,我的最后三个项目符号仍然适用,


推荐阅读