如果存在后缀,则正则表达式查找组

时间:2014-05-26 10:54:06

标签: regex

我有下一个正则表达式:a(.)ad.*cc(\d) 和输入字符串的2个示例:" a7ad == cc0" " a7a == cc0"

我在第一种情况下获得' 7' ' 0'

但我想在第一种情况下使用' 7' ' 0' none ,第二名是' 0' (如果只有d后缀,则必须找到第一组)

3 个答案:

答案 0 :(得分:1)

怎么样:

(?:a(.)ad)?.*cc(\d)

(?:a(.)ad)?尝试匹配a7ad,如果匹配,则捕获组1中的数字,否则组1为空。

答案 1 :(得分:1)

您可以使用此模式:

a(?:(.)ad|.a).*cc(\d)

如果第一个备用(.)ad失败,则正则表达式引擎使用第二个备用.a,第一个捕获组返回None

答案 2 :(得分:0)

您可以使用?选择组。

如果左侧参数中的ad是可选的,请执行以下操作:

a(.)(?:ad)?.*cc(\d)

(可选的非捕获组)

如果只有d是可选的,您可以这样做:

a(.)ad?.*cc(\d)

(只需d可选)

我还使用==的事实(如果它总是介于对你很重要的部分之间)。确切地说,取决于那里可以出现的输入类型。