我正在做正则表达式的功课,并在OR
遇到一些困难。
给出以下字符串:
avc7fsrd5vcc12vfscsrwt1qw7eetrs&fsrsy
应该返回t1 s
fdjhads jhf&5672t3zcxvb,m654godjhfjdyeuyr123jfjjdjfjdfj77djsfhdjhfdsf99
应该返回t3去123 77
第一部分是用一些数字提取t然后根据第一个提取s或go。如果它去了,那么我们需要在之后提取两个数字,否则停止。
这是我正在使用的正则表达式
'(t[0-9]).*?(go).*?([0-9]+).*?([0-9]+)|(t[0-9]).*?(s)'
但是当我向第二个字符串添加s并且提取而不是s时,它不起作用。
任何帮助都将不胜感激。
答案 0 :(得分:1)
它相当简单。第一次轮换优先于第二次轮换
去之前确保没有s
。
(t[0-9])[^s]*?(go).*?([0-9]+).*?([0-9]+)|(t[0-9]).*?(s)
( t [0-9] ) # (1)
[^s]*?
( go ) # (2)
.*?
( [0-9]+ ) # (3)
.*?
( [0-9]+ ) # (4)
|
( t [0-9] ) # (5)
.*?
( s ) # (6)
答案 1 :(得分:1)
答案 2 :(得分:1)
我认为这是你需要的正则表达式:
(t\d+).*?(go|s)\D*?(\d*)\D*?(\d*)
如果我理解你的问题,它可以按照你的要求运作。
第一场比赛的演示: http://regexr.com/3coi0
第二场比赛的演示 : http://regexr.com/3coht
如需更多帮助理解高级正则表达式,我建议您阅读 https://www.talentcookie.com/2015/07/lets-practice-regular-expression https://www.talentcookie.com/2016/01/some-useful-regular-expression-terminologies/