我正在尝试使用python替换跨越文本文件多行的文本块。这是我的输入文件的样子。
input.txt:
ABCD abcd (
. X (x),
.Y (y)
);
ABCD1 abcd1 (
. X1 (x1),
.Y1 (y1)
);
我正在读取具有以下代码的上述文件,并尝试替换文本,但未成功。下面是我的代码。
fo = open(input.txt, 'r')
input_str = fo.read()
find_str = '''ABCD abcd (
.X (x),
.Y (y)
);'''
replace_str = '''ABCDE abcde (
. XX (xx),
.YY (yy)
);'''
input_str = re.sub(find_str, replace_str, input_str)
但是input_str似乎没有变化。不知道我在想什么。有任何线索吗?
答案 0 :(得分:0)
可能是因为括号(和)是正则表达式的元字符。
尝试将(
替换为\(
,将)
替换为\)
。
或对字符串使用替换方法,例如
input_str.replace(find_str, replace_str)
答案 1 :(得分:0)
尝试一下:ABCD\s+abcd\s+(\s+[.]\sX\s(x)\s*,\s*[.]Y\s*(y)\s*)\s*;
ABCD
\s+ #(1 or more 'spaces' (space, tab, new line...))
abcd
\s+
\( # left parenthesis, you need to scape this because
# parenthesis mean 'capturin group' in a regexp
\s+
[.] # Dot means 'any single character but new line' on a regexp
# so you need to scape it with either \. or [.]
\s*X\s* # (\s* means 0 or more spaces)
\(x\)
\s*,\s*
[.]Y\s*
\(y\)
\s*\)\s*;
答案 2 :(得分:0)
re.sub("([.]\\s*)(\\w+)(.*?)(\\w+)","\\1\\2\\2\\3\\4\\4",fo)
Out[412]: 'ABCD abcd (\n . XX (xx),\n .YY (yy)\n);\nABCD1 abcd1 (\n . X1X1 (x1x1),\n .Y1Y1 (y1y1)\n);'