Py学习  »  Python

两个野生字符之间的python正则表达式匹配

Raj • 4 年前 • 694 次点击  

我有一个包含以下格式的行的文件。

...
...
ABC_DEF( ac, bad, dd, ..)
...
...

我想从ABC定义中为AC和BAD添加grep,并修改文件以便..

...
...
ac, bad, 
ABC_DEF(dd, ...)
...
...

AC和BAD只是示例,它将是一些大小的字母数字字符。

我有以下python代码

import re
for line in fileinput.input(inplace=1):
    line = re.sub(r'ABC_DEF\(\w+,\w+,', r'ABC_DEF(', line.rstrip())
    print(line)

但这似乎行不通。有人能帮忙吗?

谢谢,

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/47581
 
694 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Ray Toal
Reply   •   1 楼
Ray Toal    5 年前

我想你需要

line = re.sub(r'ABC_DEF\(\s*\w+\s*,\s*\w+\s*,\s*', r'ABC_DEF(', line.rstrip())

因为单词周围可能有空格。

>>> line = 'ABC_DEF(  first ,  second   , third, fourth)'
>>> line = re.sub(r'ABC_DEF\(\s*\w+\s*,\s*\w+\s*,\s*', 
r'ABC_DEF(', line.rstrip())
>>> line
'ABC_DEF(third, fourth)'

更新:您在评论中询问您想知道如何捕获值。你可以把parens放在你想要捕捉的部分,然后打电话给 re.match 相反。这样地:

>>> line = 'ABC_DEF(  first ,  second   , third, fourth)'
>>> match = re.match(r'ABC_DEF\(\s*(\w+)\s*,\s*(\w+)\s*,\s*', line)
>>> match.group(1)
'first'
>>> match.group(2)
'second'