python - 正则表达式函数用于带有逗号和文本的句子,甚至可能延伸到一行
问题描述
我对 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
我尝试了两种方法,但当我尝试在正则表达式测试器上进行可视化时,这两种方法都没有意义。请帮忙。
解决方案
您可以使用正则表达式
,\h*.+?\h*,
此正则表达式的重要特征:
\h
匹配水平空间,因此它不包括换行符- 使用量词
*
是\h
因为文本和逗号之间可以有任意数量(包括 0)的空格 .
匹配所有非换行符,而不是\w
你使用的,它只匹配[a-zA-Z0-9_]
不包括空格的 。+?
意思是“懒惰地匹配”。
编辑:
我刚刚意识到您正在逐行读取文件并逐行应用正则表达式,因此即使您使用\s
. 尽管如此,我的最后三个项目符号仍然适用,
推荐阅读
- c# - 在异步任务中传输/访问局部变量 - API 控制器
- c# - 减小视频大小 Xamarin 表单
- c++ - grpc proto 文件生成到 C++ 问题
- c# - 如果没有新的选择,我如何编写更简单的代码?
- scripting - OWASP ZAP:启用脚本
- python - 单击鼠标添加数字?
- loopback4 - Loopback 4 如何在授权组件中访问请求授权令牌头
- python - Django:过滤日期之间的数据| DatetimeField 收到一个天真的日期时间
- html - 为什么 HTML 容器会继承 Body 子元素的所有属性和元素?
- json - 除了 swagger 中定义的字段之外,避免 json 中的其他字段导致 WSO2 APIM 3.1.0 中的验证失败