我试图在RequestHandlers
中使用python
执行某些操作,类似于使用bash中的sed执行此操作的方式。我无法反向引用我读过的用re.sub
完成的组,但似乎我做错了。
我想消除一组分隔符或分隔符内的空格以及该行的开头/结尾:
\g<>
如果这是bash,我会做类似的事情:
line1 = 'blah < b la a ah > blah'
line2 = ' b la a ah > blah'
line3 = 'blah < b la a ah '
line1 = re.sub(r"< (.*) (.*) >", r"< \g<1>\g<2> >", line1)
line2 = re.sub(r"^ (.*) (.*) >", r" \g<1>\g<2> >", line2)
line3 = re.sub(r"< (.*) (.*) $", r"< \g<1>\g<2> ", line3)
答案 0 :(得分:3)
请查看your code demo:'blah < b la a ah > blah'
与第一个blah < b la aah > blah
一起变为re.sub
,但稍后,2个最终正则表达式中没有一个与修改后的字符串匹配。
^ (.*) (.*) >
(second) regex期望在开头有一个空格,没有空格。 third regex < (.*) (.*) $
期望最终空间 - 而且没有。
您可以使用一个正则表达式解决方案。正则表达式 - r"\s*(?=[^<>]*>)"
- 将匹配任何空格,0次或更多次出现(\s*
),后跟任意数量的任何字符,但<
或>
最多第一个>
((?=[^<>]*>)
预测)。
line = re.sub(r"\s*(?=[^<>]*>)", "", line)
请参阅IDEONE demo
结果:blah <blaaah> blah
请注意,look-ahead不会消耗字符,这就是为什么我们只删除此正则表达式的空格(匹配)。