regex-group - 正则表达式:具有重复捕获组的 findall
问题描述
我想了解为什么:
re.findall(r"(\d[A-Za-z]+)", "My user name is 3e4r 5fg")
返回
['3e', '4r', '5fg']
尽管 :
re.findall(r"(\d[A-Za-z]+)+", "My user name is 3e4r 5fg")
返回
['4r', '5fg']
我测试了一些“数字字母”组之间有空格的组合,显然涉及2个点:
- 这些组之间的空间
- 最后一个“+”。
我真的不明白为什么在组后添加“+”会改变结果。有人可以向我解释导致这些不同答案的过程步骤吗?非常感谢。
解决方案
当您在括号后加上 + 时,您正在搜索包含一个或多个带有 1 个数字和(一个或多个)字母的子模式的模式,因此这个短语:"(\d[A-Za-z]+)+"
return 2 匹配:
- 3e4r
- 5fg
当您将子模式放在括号中时,意味着所有匹配该子模式的都将进入一个组,组是:
- 3e
- 5fg
该函数re.findall
仅返回组(除非没有组,则返回匹配项)。
推荐阅读
- javascript - 在 Express 中编写一个发布请求以创建一个具有给定变量的列表
- c# - ADB2C - 令牌缓存过期时处理“在 AcquiretokenSilent API 中传递了 Null 用户”错误
- java - 从 SNMP4j 陷阱接收器获取目标 IP 地址
- vue.js - Vue:设置活动类 - 获取当前 DOM 元素
- c# - 使用 List<> 的 Convert.ChangeType 上的运行时异常
- c# - 从 SelectedItem DataGrid 中获取单元格或行对象
- .net - 使用 MSBuild 构建少数项目失败
- javascript - 只需要使用一次连接事件类型而不使用 cookie 或会话
- batch-file - 批量垂直拆分csv文件
- c# - 为什么要封装 ASMX 代理方法的参数?