2016-11-12 59 views
2

,我期望摆脱这种输出是捕获字符串文字任选的正则表达式

  1. SE 180,个别的研究,16年8月24日,16年12月12日,R MAK
  2. SE 180 ,个别的研究,16年8月24日,第12 /一十六分之一十二,H KATIRCIOGLU

然而,你可以看到的,有时会因为该数据文件是如何转换,一个意想不到的(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 

回答

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 
      ^   ^

Regex101 Demo

+0

谢谢先生!对于正则表达式我还是比较新的,所以我自动认为它更像是我的一个语法错误,然后错过了判断'\ n'和空格。再次感谢你! –

-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

+0

https://regex101.com/r/heAj8F/1我尝试过了,它仍然dosent工作,我也有'?:'在那里,因为我不希望那里的数据被捕获。这不是一个好方法吗? –

+0

我看到你的第二个测试用例在之前和之后都有换行符(按钮)。通常是这种情况 – dda

相关问题