Python 如何连续替换字符串中设置值后面的单词?
如何在字符串中不断替换设置值(在我的示例中为Python 如何连续替换字符串中设置值后面的单词?,python,Python,如何在字符串中不断替换设置值(在我的示例中为\u Number)后面的单词 我要替换的文本出现两次,在文本文件中如下所示: One_Number_ = "0" if [ One_Number_ == "0" ] 所以在这个例子中,我想将单词“One”存储在一个字符串中。这个程序运行多次,因此我需要使用字符串中的\u Number部分作为设置值(从不更改),因为我将不断替换\u Number后面的单词 用我当前的代码,我不会取出One,而是在第二次出现时,我也会取出if with open(os
\u Number
)后面的单词
我要替换的文本出现两次,在文本文件中如下所示:
One_Number_ = "0"
if [ One_Number_ == "0" ]
所以在这个例子中,我想将单词“One”存储在一个字符串中。这个程序运行多次,因此我需要使用字符串中的\u Number
部分作为设置值(从不更改),因为我将不断替换\u Number
后面的单词
用我当前的代码,我不会取出One
,而是在第二次出现时,我也会取出if
with open(os.path.join('BuildWatchBundle.sh'), 'r') as file:
lines = file.readlines()
with open(os.path.join('BuildWatchBundle.sh'), 'w') as file:
for line in lines:
if (line.__contains__('_Number_')):
word = line.rsplit('_', 1)[0]
print ("Word is: " + word)
我如何调整我的代码,使我可以不断地替换字符串中设置值后面的单词
更新代码:
set_value = "_int_"
re_set = re.compile(r'(\w+)({})'.format(set_value))
ReplaceLower = ""
ReplaceUpper = ""
with open(os.path.join('text.txt'), 'r') as file:
lines = file.read()
with open(os.path.join('text.txt'), 'w') as file:
for pre, value in re_set.findall(lines):
ReplaceUpper = pre
ReplaceLower = pre.lower()
if (lines.__contains__(ReplaceLower)):
lines = line.replace (ReplaceLower, enteredNameFromShell.lower())
elif (lines.__contains__(ReplaceUpper)):
lines = line.replace (ReplaceUpper, enteredNameFromShell)
file.write(lines)
尝试使用正则表达式:
import re
lines = """
One_Number_ = "0"
if [ One_Number_ == "0" ]
"""
r = re.compile(r'(\w+)_Number_')
print r.findall(lines)
输出:
['One', 'One']
文件:
- Python
模块:re
- 正则表达式语法:
import re
lines = """
One_Number_ = "0"
if [ One_Number_ == "0" ]
"""
r = re.compile(r'(\w+)_Number_')
print r.findall(lines)
输出:
['One', 'One']
文件:
- Python
模块:re
- 正则表达式语法:
re.sub()
一次性替换所有匹配的文本:
import re
set_value = "_Number_"
replace_with = "Two"
filename = 'input.txt'
with open(filename) as f_input:
text = re.sub(r'(\w+)({})'.format(set_value), r'{}\2'.format(replace_with), f_input.read())
with open(filename, 'w') as f_output:
f_output.write(text)
对于您的示例文本,这会将您的文件更新为:
Two\u Number=“0”
如果[两个数字==“0”]
要在写入新文件之前列出所有匹配项并添加定制替换功能,请执行以下操作:
import re
set_value = "_Number_"
filename = 'input.txt'
re_set = re.compile(r'(\w+)({})'.format(set_value))
def replace(re_match):
values = {'one':'two', 'One':'Two', 'ONE':'TWO'}
word = re_match.group(1)
print('Word is', word)
return '{}{}'.format(values[word], set_value)
with open(filename) as f_input:
text = re_set.sub(replace, f_input.read())
with open(filename, 'w') as f_output:
f_output.write(text)
因此,如果您的文件包含:
One_Number_ = "0"
if [ One_Number_ == "0" ]
one_Number_ = "0"
if [ one_Number_ == "0" ]
ONE_Number_ = "0"
if [ ONE_Number_ == "0" ]
现在的输出是:
Two_Number_ = "0"
if [ Two_Number_ == "0" ]
two_Number_ = "0"
if [ two_Number_ == "0" ]
TWO_Number_ = "0"
if [ TWO_Number_ == "0" ]
只要用任何必要的转换来更新字典。或者用你自己的逻辑<代码>重新匹配。组(1)包含匹配的单词。所以您只需要构建一个合适的替换字符串并返回它。您还可以添加一个
print(re_match.group(1))
来显示每个匹配的单词,而不是第二个findall()
循环。可以使用re.sub()
一次性替换所有匹配的文本:
import re
set_value = "_Number_"
replace_with = "Two"
filename = 'input.txt'
with open(filename) as f_input:
text = re.sub(r'(\w+)({})'.format(set_value), r'{}\2'.format(replace_with), f_input.read())
with open(filename, 'w') as f_output:
f_output.write(text)
对于您的示例文本,这会将您的文件更新为:
Two\u Number=“0”
如果[两个数字==“0”]
要在写入新文件之前列出所有匹配项并添加定制替换功能,请执行以下操作:
import re
set_value = "_Number_"
filename = 'input.txt'
re_set = re.compile(r'(\w+)({})'.format(set_value))
def replace(re_match):
values = {'one':'two', 'One':'Two', 'ONE':'TWO'}
word = re_match.group(1)
print('Word is', word)
return '{}{}'.format(values[word], set_value)
with open(filename) as f_input:
text = re_set.sub(replace, f_input.read())
with open(filename, 'w') as f_output:
f_output.write(text)
因此,如果您的文件包含:
One_Number_ = "0"
if [ One_Number_ == "0" ]
one_Number_ = "0"
if [ one_Number_ == "0" ]
ONE_Number_ = "0"
if [ ONE_Number_ == "0" ]
现在的输出是:
Two_Number_ = "0"
if [ Two_Number_ == "0" ]
two_Number_ = "0"
if [ two_Number_ == "0" ]
TWO_Number_ = "0"
if [ TWO_Number_ == "0" ]
只要用任何必要的转换来更新字典。或者用你自己的逻辑<代码>重新匹配。组(1)包含匹配的单词。所以您只需要构建一个合适的替换字符串并返回它。您还可以添加一个
打印(re_match.group(1))
来显示每个匹配的单词,而不是第二个findall()
循环。请解释您所说的持续是什么意思?为什么要使用rsplit
而不是split
?似乎你想要在第一个\uu
@Rahul之前出现的内容,这意味着我会不断地替换\u Number\u
后面的单词,所以每次我运行pythonscript时,都会出现一个新单词。@doctor确实如此。我只想要第一个单词后面的单词第一个\uu
后面的单词是Number\u
请解释你所说的持续是什么意思?你为什么用rsplit
而不是拆分?似乎你想要在第一个\uu
@Rahul之前出现的内容,这意味着我会不断地替换\u Number\u
后面的单词,所以每次我运行pythonscript时,都会出现一个新单词。@doctor确实如此。我只想要第一个后面的单词第一个后面的单词是编号错误:必须是str,而不是sre.sre模式卡洛斯这不是一个很有用的注释。哪一行?python的哪个版本?TypeError:必须是str,而不是_sre.sre_Pattern
@Carlos这不是一个非常有用的注释。哪一行?哪一个版本的python?工作得很好?如果我想在字符串中将“一”替换为“二”,而不是在读取文件时直接替换它之前,如何调整代码?尝试用readlines()而不是read()使其工作。如果我更改了它,那么脚本将不会运行它将无法使用readlines()
,因为这将生成一个行列表。您必须在每一行而不是整个文本上执行正则表达式。那会慢得多。问题是,我想以字符串形式将该单词输出的原因是,我可以在文件中的不同位置替换它。它在txt中是小写的,也是大写的,这是我所做的代码:对于pre,在re_set.findall(text):ReplaceUpper=pre-ReplaceLower=pre.lower()中的值如果(text.uu包含_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu:text=text.replace(ReplaceUpper,enteredName)
然后我写出f\u输出。write(text)
工作完美如果我想先存储“一”,然后再将其替换为字符串中的“二”,而不是在读取文件时直接替换它,你会如何调整代码?尝试以某种方式使其与readlines()一起工作而不是read()。如果我更改了它,那么脚本将不会运行它将无法使用readlines()
,因为这将生成一个行列表。您必须在每一行而不是整个文本上执行正则表达式。那会慢得多。问题是,我想以字符串形式将该单词输出的原因是,我可以在文件中的不同位置替换它。它在txt中是小写的,也是大写的,这是我所做的代码:对于pre,在re_set.findall(text):ReplaceUpper=pre-ReplaceLower=pre.lower()中的值如果(text.uu包含_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu:text=text.replace(ReplaceUpper,enteredName)