正则表达式可将特定字符串与之前的预定义字符匹配

时间:2019-12-18 15:28:27

标签: regex

我需要写一个字符串,使我有机会提取一部分字符串。

在以下情况下,我只需要提取ES_(作为国家/地区代码),但是仅在情况1和2中可以提取,因为如您在情况3中所见,字符串ES_的一部分出现了,但作为更宽的文本SALES_的一部分

  1. 字符串的开头: ES _MF_FB-Paid_UCB_SpecialContent_AdventCalendar_Drivetosite_2019-12-16
  2. 字符串中间:MF_FB-Paid_UCB_SpecialContent_ ES _AdventCalendar_Drivetosite_2019-12-16
  3. 字符串的任何位置,但必须忽略:IT_MF_FB-Paid_UCB_SPECIALSAL ES _AdventCalendar_Drivetosite_2019-12-16

我能够使用^(?:[^ ] * ){4}([^ _] *)来处理案例2,但我不知道如何修改它到: -如果它在字符串的开头(或结尾),则将其提取 -如果它在字符串的该部分之前或之后与下划线不同,请忽略它

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您可以在后面使用积极的表情:

(?<=^|_)ES_
  

ES_ MF_FB-Paid_UCB_SpecialContent_AdventCalendar_Drivetosite_2019-12-16
  IT_MF_FB-Paid_UCB_SPECIALSALES_AdventCalendar_Drivetosite_2019-12-16
  MF_FB-Paid_UCB_SpecialContent _ ES_ AdventCalendar_Drivetosite_2019-12-16

答案 1 :(得分:0)

如果支持(?<!后的否定性,则可以使用negated character class [^

断言在左边直接是除下划线以外的任何字符。
(?<![^_])ES_

Regex demo

或者,如果您只想要ES部分:

(?<![^_])ES(?=_)

Regex demo


如果不支持环视,则可以声明字符串的开头或使用alternation匹配下划线,并为ES部分使用捕获组并匹配以下下划线

(?:^|_)(ES)_

Regex demo