替换与模式匹配的部分字符串

时间:2014-02-21 09:30:03

标签: python regex match

这是我的第一天Python,所以请原谅我这个问题

问题: 在文件中替换每次出现的 使用 TRIM(TRIM(CHR(09)FROM column_name)) trim(column_name)。我已经整理了如何进行模式搜索并熟悉re.sub()函数。

与我的案例匹配的模式是

p = re.compile ('trim\([a-z0-9_]+\)',re.I)

但是如何替换保留列名???

的匹配模式

所需的输出例如如下:

input: select trim(API12), trim(FIELD_CODE) from table
output: select TRIM (TRIM (CHR (09) FROM API12)), TRIM (TRIM (CHR (09) FROM FIELD_CODE)) from table

3 个答案:

答案 0 :(得分:1)

import re
s = 'select trim(API12), trim(FIELD_CODE) from table'
print re.sub(r'trim\((?P<col>[a-zA-Z0-9_]+)\)', 'TRIM (TRIM (CHR (09) FROM \g<col>))', s)

答案 1 :(得分:1)

工作代码:

import re
i = 'select trim(API12), trim(FIELD_CODE) from table'
re.sub(r"trim\((\w+)\)", r"TRIM (TRIM (CHR (09) FROM \1))", i)

解释

  1. 您不必使用标记re.I,而是使用\w,它等同于[a-zA-Z0-9_]
  2. \(\)表示正常括号,()表示分组
  3. 使用\1呈现第一个匹配组,\2表示第二个匹配组。

答案 2 :(得分:0)

我刚刚为自己整理了这个

感谢您的帮助!

import re

line = "select trim(API12), trim(FIELD_CODE) from dual"

output = re.sub(r'trim\(([a-zA-Z0-9_]+)\)',r'TRIM (TRIM (CHR (09) FROM\1))',line)

print output

<强>&GT;&GT;选择TRIM(TRIM(CHR(09)FROM API12)),TRIM(TRIM(CHR(09)FROM FIELD_CODE))来自双重