繁体   English   中英

如何使用正则表达式将字符串放在 python 中某个“单词”的前面?

[英]How to put strings in front of a certain 'word' in python by using regular expression?

我在 python 中使用正则表达式时遇到了一些问题。

如下例所示,

我想要做的是把'string_1'放在以字母'past'开头的段落前面。(参考下面的代码)

输入.txt

some random texts (100+ lines)
bbb
...
ttt

modern_b different_story(
...
some random texts
...
);

past_c different_story(

...
some random texts
...
);

所需 output.txt

some random texts (100+ lines)
bbb
...
ttt

modern_b different_story(
...
some random texts
...
);

java is fun; 
python is fun;

past_c different_story(

...
some random texts
...
);

好的,那么这是我到目前为止的代码:

import re

output_file = open('output.txt', 'w')
input_file = open('input.txt', 'r')

string_1 = 'java is fun; \npython is fun;'

t = re.sub(
    '(?=\s*^past)',
    '\n' + string_1 + '\n' ,
    input_file.read(),
    0,
    re.M
)

output_file.write(t)

当我运行此代码时,output 出现在“past_c”前面,但它带有多个相同的行。我只需要字符串“一次”。 我想我几乎到达了终点。 但是现在多条线似乎在脖子上疼痛..我假设绳子足够长。 我只需要参考下一段,而不是上一段(在这种情况下为'past_c'。)你能给我任何想法来纠正这个问题吗? 或者,也欢迎任何更有效的方法来实现这一点!! 谢谢

您可以使用以下内容来实现您想要的我的想法:

import re

with open("input.txt", "r") as inp:
    with open("output.txt", "w") as oup:
        for i in inp:
            oup.write("my_string " + i) if re.match("^a", i) else oup.write(i)

基本上,如果一行以“a”开头,则添加“my_string”并将该行写入 output 文件,否则它只是将该行复制到 output 文件

下面的这个片段做同样的事情,但将它写入同一个文件:

import re

with open("input.txt", "r") as inp:
    my_list = []
    for i in inp:
        my_list.append(("my_string " + i)) if re.match("^a", i) else my_list.append(i)

with open("input.txt", "w") as inp:
    inp.write("".join(my_list))

积极展望未来可能会有所帮助。

text = '''

bbb
...
ttt

modern_b different_story(
...
some random texts
...
);

past_c different_story(

...
some random texts
...
);

'''


re.sub(r'(?=past_c different_story)', r'java is fun;\npython is fun;\n\n', text)


bbb
...
ttt

modern_b different_story(
...
some random texts
...
);

java is fun;
python is fun;

past_c different_story(

...
some random texts
...
);


def fun1(text, st):
    return re.sub(r'(?=past_c different_story)', fr'{st}', text)


fun1(text, 'java is fun;\npython is fun;\n\n')


bbb
...
ttt

modern_b different_story(
...
some random texts
...
);

java is fun;
python is fun;

past_c different_story(

...
some random texts
...
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM