python - 用于搜索特定子字符串的正则表达式
问题描述
我试过这段代码:
re.findall(r"d.*?c", "dcc")
搜索第一个字母 d 和最后一个字母 c 的子字符串。
但我得到输出['dc']
正确的输出应该是['dc', 'dcc']
.
我做错了什么?
解决方案
您的两个问题.*
是贪婪而.*?
最小,并且 re.findall() 仅返回不重叠的匹配项。这是一个可能的解决方案:
def findall_inner(expr, text):
explore = list(re.findall(expr, text))
matches = set()
while explore:
word = explore.pop()
if len(word) >= 2 and word not in matches:
explore.extend(re.findall(expr, word[1:])) # try more removing first letter
explore.extend(re.findall(expr, word[:-1])) # try more removing last letter
matches.add(word)
return list(matches)
found = findall_inner(r"d.*c", "dcc")
print(found)
这有点矫枉过正,使用 findall 而不是 search 和使用>= 2
instead of > 2
,因为在这种情况下,只能有一个不重叠的匹配 ofd.*c
并且一个字符串不能匹配模式。但是它有一些灵活性,具体取决于您可能想要的其他类型的模式。
推荐阅读
- laravel - Laravel Guzzle HTTP 不断返回 404
- javascript - 从 Mixamo 下载的空闲动画不起作用
- typescript - 无法从 node_modules lib 导入接口
- django - 使用 django-markdownx 通过 S3 拖放图像时出现硬编码的 url 问题
- html - 在 vue 2 (V-Model) 中操作元素的数据
- java - 如何删除Android中Material DatePicker对话框中显示的日期名称
- angular - 使用 Chartjs Angular 按值排序和隐藏图例项目
- c# - 如何使用 blazor 创建实时数据 sql server
- mysql - 创建存储过程时出现语法错误
- mongodb - 仅在满足特定条件时,在特定时间后自动更新字段