我有一个字符串:
foo bar
foo1#9 0x103806f4 bar1
foo2#10 0x0f6dd704 bar2
foo3 bar3
我尝试过以下方法:
^((?!#[\ d] {1,2} 0x [0-9a-f] {8})。)* $
得到
foo bar
foo3 bar3
和
^((?!#[\ d] {1,2} 0x [0-9a-f] {8})。)*
得到
foo bar
foo1
foo2的
foo3 bar3
但我想要的是
foo bar
foo1 bar1
foo2 bar2
foo3 bar3
我怎样才能做到这一点?
答案 0 :(得分:3)
答案 1 :(得分:3)
如果您想要开头和结尾非空白字符,使用否定前瞻不会完成任务。您可以按如下方式匹配预期输出:
^(\S+).*?(\S+)$
然后,您可以使用首选语言合并匹配结果:python示例...
>>> import re
>>> s = '''foo bar
foo1 #9 0x103806f4 bar1
foo2 #10 0x0f6dd704 bar2
foo3 bar3'''
...
>>> for m in re.finditer(r'(?m)^(\S+).*?(\S+)$', s):
... print(" ".join(m.groups()))
foo bar
foo1 bar1
foo2 bar2
foo3 bar3
不要使用正则表达式,而是考虑拆分字符串并将索引连接在一起。