Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何连续替换字符串中设置值后面的单词?_Python - Fatal编程技术网

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)