如何使用RegEx进行分组(复杂字符串)

时间:2015-02-17 16:53:15

标签: regex

考虑以下字符串:

sarga erhaerh<bar>gwegw</bar>wegweg<bar>aeg seg</bar>rgweg

我需要这样分组:

group 1: sarga erhaerh
group 2: <bar>gwegw</bar>
group 3: wegweg
group 4: <bar>aeg seg</bar>
group 5: rgweg

此字符串可以是与<bar>元素组合的文本的任意组合。提取条形元素并不困难,请查看解决方案here

我有什么建议可以扩展它以便它也能匹配其他部分吗?

2 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式:

(<bar>.*?</bar>|.+?(?=(?:<bar>|\z)))

RegEx Demo

<强>解释

<bar>.*?</bar>   # Match text from <bar> to </bar>
|                # alternation (OR) of regex
.+?              # match one or more of any characters *if*
(?=              # start of positive lookahead
  <bar>          # Match literal text <bar> or
  |              # alternation  
  \z             # end of line
)                # end of positive lookahead

换句话说,我们正试图匹配:

  • <bar></bar>之间的文字或
  • <bar>以外的文字和</bar>

答案 1 :(得分:1)

试试这个:^([a-z\s]*)(<bar>.*?<\/bar>)([a-z])*(<bar>.*?<\/bar>)([a-z]+)$

演示:https://regex101.com/r/cF2kO7/2