【发布时间】:2015-07-16 17:15:36
【问题描述】:
Scanario
我必须从组合字符串中获取子字符串。 匹配条件:
字符串以'section1:'开头
捕获的字符串可以是空格分隔或破折号分隔的字母数字值列表
如果捕获的字符串以特定后缀('-xx')结尾,则从捕获的字符串中排除该后缀。
示例
section1:ypsilon : 第 1 部分匹配,抓取 'ypsilon'
section1:ypsilon zeta : 第 1 部分匹配,抓取 'ypsilon zeta'
section1:ypsilon-zeta : 第 1 部分匹配,抓取 'ypsilon-zeta'
section1:ypsilon-xx:第 1 节匹配,抓取 'ypsilon',排除 '-xx'
section1:ypsilon zeta-xx:第 1 部分匹配,抓取 'ypsilon zeta',排除 '-xx'
section1:ypsilon-zeta-xx:第 1 部分匹配,抓取 'ypsilon-zeta',排除 '-xx'
section2:ypsilon : 第 2 节不匹配
目前的解决方案
^section1:([a-zA-Z0-9\- ]+)(\-xx)?$
这个想法是获得第 1 组,而第 2 组是可选的。 Demo.
问题
不幸的是,后缀与 group1 定义匹配,因为它是一个带有破折号的字母字符串。所以生成的捕获字符串不排除后缀。
有什么线索吗?
【问题讨论】:
标签: regex lookahead capturing-group