我将在JavaScript中实现RegExp。RegExp代码,用于在字符串中查找等距字符
我认为解释这个最好的方法就是一个例子。如果搜索字符串是
'abc'
和草垛是
'auaisdgbbhbcsccddciubbffs'
的模式需要打:
'[a]uaisdg[b]bhbcsc[c]ddciubbffs' and
'au[a]isdgb[b]hbcsc[c]ddciubbffs'
,并返回这些字符的位置...
甚至可以使Regex做出这样的事情吗?
我将在JavaScript中实现RegExp。RegExp代码,用于在字符串中查找等距字符
我认为解释这个最好的方法就是一个例子。如果搜索字符串是
'abc'
和草垛是
'auaisdgbbhbcsccddciubbffs'
的模式需要打:
'[a]uaisdg[b]bhbcsc[c]ddciubbffs' and
'au[a]isdgb[b]hbcsc[c]ddciubbffs'
,并返回这些字符的位置...
甚至可以使Regex做出这样的事情吗?
鉴于我们不知道你正在使用的编程语言,这是不可能提供在这一点上一个明确的答案。
这就是说,我不知道任何正则表达式构造会允许这种匹配。
如果我理解正确,你想找到一个'a',例如后面跟着一个'b'六个字符。然后,由于'b'在'a'之后出现了六个字符,所以您希望在'b'之后找到一个'c'六个字符。本质上,你想要backreferences,但你只想匹配反向引用的长度而不是实际的文本。我不认为这是正常表达式可能的。
有可能是一些正则表达式的实现有一个不寻常的结构允许这个,所以了解你的平台会有所帮助。
UPDATE
JavaScript有least powerful regex实现在那里的一个。我认为你不能用纯正则表达式来做到这一点。您需要编写一些额外的代码(并且我会诚实地为您的简单示例推荐一种“仅限代码”方法)。
如果我正确理解你的问题,这样的正则表达式可能的工作:
"(a).{6}(b).{6}(c).{6}.*"
你想加入群1,2,和3
既然你没有指定语言,考虑蟒蛇下面的示例中使用字符串你给上面:
>>> q = re.compile(r"(a).{6}(b).{6}(c)")
>>> s1 = 'auaisdgbbhbcsccddciubbffs'
>>> s2 = 'auaisdgbbhbcsccddciubbffs'
>>> res1 = q.findall(s1)
>>> res2 = q.findall(s2)
>>> print res1, res2
[('a', 'b', 'c')] [('a', 'b', 'c')]
>>> for r in res1:
print ''.join(r)
abc
>>> for r2 in res2:
print ''.join(r)
abc
+1'6'是一个任意的数字,但是如果正则表达式是在for循环中构造的并且应用了多次不同宽度的数据,它可能对OP有用。效率不高,但可以完成工作。 – JDB
在Perl中,你可以返回使用$ + [1]等
匹配的位置例如
$x=qqqafkewibslspcfjfjfj;
$x=~/(a).*(b).*(c)/;
print 'a was at: ' . $+[1] . ' b was at: ' . $+[2] . ' c was at:' . $+[3];"
给我:
a was at: 4 b was at: 10 c was at:15
OP从此更新了他/她的问题以表明JavaScript是语言。 – JDB
哪种语言,你试过了什么? – Anirudha
我不能得到你想要的正则表达式只用你的例子实现的规则。你能提供一个不太复杂的吗?例如,什么应该“azbzcz”,“abc”,“aabbcc”和“aazbzcc”匹配? – sp00m
我不认为正则表达式本身可以做到这一点,除非你知道字符之间的最大空间(然后你可以做一个冗长,详尽,丑陋的正则表达式)。更好的方法可能是解析字符串,计算第一个和第二个匹配字母之间的字符,然后搜索第三个字符。 – iamnotmaynard