常用表达

时间:2019-01-23 09:18:43

标签: regex

我有一个元素列表

Workset(Name: Ss_75_50_28_29 - Fire Alarm Systems)
Workset(Name: Ss_80 - Lifts and Escalators Systems)
Workset(Name: Ss_25_50 - Facade Access Systems)
Workset(Name: Ss_75_80_45_45 - Lightning Protection Systems)

我希望仅过滤

Ss_75_50_28_29 - Fire Alarm Systems

正则表达式模式不仅隔离了我需要的内容,而且还引入了CR

Ss\d{2}_\d{2}|_\d{2}|_\d{2}|\s+-\s\w+|\s+\w+

,并在Ss之前占用空格。

有人可以帮助我获得正确的结果吗?

谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用1个匹配项来代替使用交替|

Ss_\d{2}(?:_\d{2})*\s+-\s+\w+(?:\s\w+)*

请参见regex demo | Python demo

这将匹配:

  • Ss_\d{2}匹配Ss_,后跟2位数字
  • (?:_\d{2})*在非捕获组中重复0+次下划线,后跟2位数字
  • \s+-\s+匹配1+次空白字符,--再匹配1+次空白字符
  • \w+匹配一个字符1次以上
  • (?:\s\w+)*在非捕获组中重复0+次空白字符,然后重复1+次单词字符

或者,如果要考虑整个字符串,则可以使用捕获组:

\AWorkset\(Name: (Ss_\d{2}(?:_\d{2})*\s+-\s+\w+(?:\s\w+)*)\)\Z

请参见regex demo | Python demo

答案 1 :(得分:0)

使用

^Workset\(Name:\s+(.*?)\s+-\s+(.*?)\)$

给您this [regex101.com]。