我期望从中获得的输出是
然而,正如您所看到的,有时由于数据文件的转换方式,前两个数据字段之间会出现意外的(button)
。
这是我想出的正则表达式。我不明白为什么它没有捕获。我跳了一双眼睛会帮助我理解我的错误。我仍然是正则表达式的新手,但这是我理解的
在我的情况下,为了捕获字符串文字"(按钮)",我输入\(button\)
。对于我的数据,字符串文字总是以空格结尾。我想让整组数据可选。因此,我最终得到了(?:\(button\)\s?)?
。
使用正则表达式
https://regex101.com/r/88VDYN/1
([A-Z]+\s\S+)\s(?:\(button\)\s?)?([A-Z]+.+?)\s\d+\s\d+.+?(\d\d\/\d\d\/\d\d)-(\d\d\/\d\d\/\d\d)\s?(?:.*?([A-Z]\s[A-Z]+-*[A-Z]+))?\s
数据集
SE 180 INDIVIDUAL STUDIES 92 49321 3 SUP 73 P 1/90 F 0730-1020 08/24/16-12/12/16 ENG 189 R MAK
SE 180
(button)
INDIVIDUAL STUDIES 90 49320 3 SUP 73 P 0/50 MW 1500-1615 08/24/16-12/12/16 ENG 337 H KATIRCIOGLU
答案 0 :(得分:3)
您的测试字符串在(button)
之前和之后实际上有多个空白字符。一个是换行符,另一个是普通空格。
您需要在\s+
周围使用\s*
和\s
而非(button)
:
([A-Z]+\s\S+)\s+(?:\(button\)\s*)?([A-Z]+.+?)\s\d+\s\d+.+?(\d\d\/\d\d\/\d\d)-(\d\d\/\d\d\/\d\d)\s?(?:.*?([A-Z]\s[A-Z]+-*[A-Z]+))?\s
^ ^
答案 1 :(得分:-2)
删除模式中的?:
。这就是打破它的原因。
([A-Z]+\s\S+)\s(\(button\)\s?)?([A-Z]+.+?)\s\d+\s\d+.+?(\d\d\/\d\d\/\d\d)-(\d\d\/\d\d\/\d\d)\s?(?:.*?([A-Z]\s[A-Z]+-*[A-Z]+))?\s