提问人:Oblomov 提问时间:10/20/2023 最后编辑:Oblomov 更新时间:10/20/2023 访问量:55
根据特定模式对标签进行分组
Grouping tags based on a specific pattern
问:
像这样的文本片段
04040p0015 宏驱动对象 / 宏 DO SERVO, VECTOR, HLA, SERVO_AC, VECTOR_AC, SERVO_I_AC, VECTOR_I_AC, A_INF, S_INF, R_INF, B_INF, TM31, TM15DI_DO, TM120, TM150,
必须解析为四组
- 04040
- 编号:P0015
- 宏驱动器对象 / 宏 DO
- 伺服、矢量、HLA、SERVO_AC、VECTOR_AC、SERVO_I_AC、VECTOR_I_AC、A_INF、S_INF、 R_INF、B_INF、TM31、TM15DI_DO、TM120、TM150、
其中第一组和第二组表示不同类型的 ID,第 3 组表示标题,第 4 组包含由 2 个或多个大写字母组成的标记,后跟 none 或 one _ ,后跟无或多个大写字母,后跟逗号。
([0-9]+)([rp][0-9]{4,})(.*)([A-Z]{2,}_?[A-Z,0-9]{2,},)
返回
- 04040
- 编号:P0015
- 宏驱动对象 / 宏 DO SERVO, VECTOR, HLA, SERVO_AC, VECTOR_AC, SERVO_I_AC, VECTOR_I_AC, A_INF, S_INF, R_INF, B_INF, TM31, TM15DI_DO, TM120,
- TM150型,
也就是说,它正确地获得了前两组,但未能正确地分离后两组。
正则表达式有什么问题?
答:
1赞
anubhava
10/20/2023
#1
您可以使用此正则表达式来获得所需的 4 个捕获组:
(\d+)([rp]\d{4,})(.*?)\s+((?:[A-Z]\w+,\s+)+)
正则表达式详细信息:
(\d+)
:第 1 组捕获 1+ 位数字([rp]\d{4,})
:第 2 组匹配以 4+ 数字开头或后跟的文本r
p
(.*?)
:第 3 组匹配并捕获 0 个或多个任何字符(懒惰)\s+
: 1+ 空格((?:[A-Z]\w+,\s+)+)
:第 4 组匹配和捕获以大写字母开头的单词,后跟逗号和 1+ 个空格
评论
0赞
anubhava
10/24/2023
您可以只使用:(\d+)([rp]\d{4,5}(?:\[0\.{3}[n,\d]+\])?)(.*?)\s+((?:[A-Z,0-9,_]+,?\s+)+)(.*)
评论