Regex 正则表达式:在匹配之前删除字符
我想知道是否有一种方法可以使用正则表达式在Regex 正则表达式:在匹配之前删除字符,regex,Regex,我想知道是否有一种方法可以使用正则表达式在[removebefore]n个匹配项之前删除n个出现的字符 可能不清楚,但举例说明了一切: 这是一个测试字符串[removebefore][removebefore][removebefore]。blablabla[removebefore][removebefore] 应该改成 这是一个teststr。blablab 当然,这可以通过匹配和替换/.\[removebefore\]/十几次来实现,但是有没有一种方法可以在一个regexp中实现呢 编辑:
[removebefore]
n个匹配项之前删除n个出现的字符
可能不清楚,但举例说明了一切:
这是一个测试字符串[removebefore][removebefore][removebefore]。blablabla[removebefore][removebefore]
应该改成
这是一个teststr。blablab
当然,这可以通过匹配和替换/.\[removebefore\]/
十几次来实现,但是有没有一种方法可以在一个regexp中实现呢
编辑:
我试着用PHP做这件事。事实上,我正在搜索一个正则表达式,它匹配
[anychar]{n}\[removebree\]{n}
,其中n是removebree的数目。据我所知,正则表达式匹配事物。它们不会删除或修改输入
一个非常简单的算法是:
1-读取输入并计数字符,直到到达[removebefore]
2-到达[removebefore]时,计算另一个变量中[removebefore]的数量
3-从字符数中减去[removebefore]的数目,并将其保存在变量中,我们称之为“n”
4-再次检查输入,打印第一个“n”字符数
在这个算法中需要做一些错误处理,但基本上就是这样。使用
perl
正则表达式:
s<([^\[]+)((?:\[removebefore\])+)><substr( $1, 0, length($1) - scalar(split(/]\[/, $2)) )>ge
结果:
This is a teststr. blablab
你用哪种语言?只需进行全局替换。您选择的语言可能提供了执行此操作的工具,无论是否使用regexp。Python应该是
mystring.replace('[removebefore]','')
perl script.pl
This is a teststr. blablab