2

谁能帮我把这个正则表达式翻译成 Pythonre模块?

sed -e "s/^[^ ]* \([^ ]*\) \([0-9]*\) \([0-9:]*\) \([0-9]*\) /\1 \2 \4 \3 /"

据我了解,这将一个文本替换为另一个文本。如何使用re模块创建类似的东西?谢谢!

例如Fri Mar 21 07:16:51 2008 -0600将转换为Mar 21 2008 07:16:51 -0600.

source = 'Fri Mar 21 07:16:51 2008 -0600'
pattern = re.compile('^[^ ]* \([^ ]*\) \([0-9]*\) \([0-9:]*\) \([0-9]*\) ')
result = re.sub('\\1 \\2 \\4 \\3 ', source)
4

2 回答 2

2

也将反斜杠放在模式中的括号上,如下所示:

pattern = re.compile('^[^ ]* ([^ ]*) ([0-9]*) ([0-9:]*) ([0-9]*) ')

按照您的方式,您正在逃避需要被识别为分组的括号,以便您实际捕获与 \1 ... \4 相对应的四个组

于 2012-04-27T19:01:49.550 回答
1

试试这个,单行版本:

import re
re.sub(r'^[^ ]* ([^ ]*) ([0-9]*) ([0-9:]*) ([0-9]*) ', '\g<1> \g<2> \g<3> \g<4>', source)

或者,使用编译模式 - 如果要重用相同的正则表达式,效率会更高:

import re
pattern = re.compile(r'^[^ ]* ([^ ]*) ([0-9]*) ([0-9:]*) ([0-9]*) ')
pattern.sub('\g<1> \g<2> \g<3> \g<4>', source)
于 2012-04-27T19:03:57.233 回答