python - 正则表达式捕获组除以中间的数字
问题描述
我需要从一个字符串中捕获 3 个组。该字符串采用以下形式:
{phrase 1} {optional number} {optional phrase 2}
这方面的几个例子是:
Battery Bank 1
Battery Bank 1 Segments
Battery Bank 1 Warranty Logger
Battery Bank 10
Battery Bank 10 Segments
Battery Bank 10 Warranty Logger
BSU
BSU 1
PCS 3
PCS 1
System
System Meter
如您所见,唯一的强制性组是第一个由单词字符和空格组成的组,直到出现至少 1 位的数字。然后,可选地,另一组单词和空格字符。
这是我到目前为止所拥有的,但它无法正常工作。它在线条上匹配。它应该匹配每行一个。
([a-zA-Z\s]+)(\d+)?(\w)?
这是一个可以使用的 regex101 链接: https ://regex101.com/r/tSGIEm/2
解决方案
您可以将此正则表达式与可选组一起使用:
([a-zA-Z]+(?:[ \t]+[a-zA-Z]+)*)(?:[ \t]+(\d+)(?:[ \t]+(.+))?)?
正则表达式详细信息:
(
: 开始捕获组 #1[a-zA-Z]+
: 匹配 1+ 个字母的单词(?:[ \t]+[a-zA-Z]+)*
: 匹配 0 个或多个由 1+ 个空格/制表符分隔的单词
)
: 结束捕获组 #1(?:
: 启动非捕获组 #1[ \t]+
: 匹配 1+ 个空格或制表符(\d+)
: 匹配 1+ 个数字并在组 #2 中捕获(?:
: 启动非捕获组#2[ \t]+
: 匹配 1+ 个空格或制表符(.+)
:匹配任何字符的 1+ 并在组 #3 中捕获
)?
:结束可选的非捕获组#2
)?
:结束可选的非捕获组#1
推荐阅读
- spring-boot - Spring集成TCP客户端抛出“消息组装期间套接字关闭”异常
- c# - IIS 身份验证 - 调用同一服务器
- fiware - Fiware IoT Agent UL:通过 mqtt 向设备发送 command_value
- cocoa - 如何使 NSScrollView 中的 MTKView 显示滚动条
- python - 为网页抓取时不存在的项目添加值
- android - Google Place API - 如何使用地点 ID 获取特定地点的内容
- javascript - 当我尝试通过 Laravel 存储来自 Vue.JS 的数据时出现错误 500
- r - 在数据框中的滑动窗口中拆分字符串
- matlab - 在 MATLAB 中使用三角函数最小化方程和约束
- latex - 如何将乳胶独立包与knitr一起使用?