我有一个document.txt,其中有一行代表" randomtext此处位置34 randomtexthere"。
我知道如何用另一个单词替换单词但是如果我想在单词" location"?之后替换随机整数怎么办?如果单词后面没有整数,则可能会出错。
我无法指定要替换的确切数字,因为该数字可能会发生变化。所以,我正在寻找一种方法来找到" location"之后的数字。并将其更改为我指定的数字。
我目前正在使用类似的东西:
def replaceid():
source = "C:/mypath/document.txt"
oldtext = "oldtexthere"
newtext = "newtexthere"
with fileinput.FileInput(source, inplace=True, backup='.bak') as file:
for line in file:
print(line.replace(oldtext, newtext), end='')
答案 0 :(得分:3)
我无法指定要替换的确切数字,因为该数字可以更改
这表示你想要一个正则表达式来描述模式“一个数字”而不写任何特定的号码,并说它必须在'location'之后找到。
可能看起来像这样:
import re
s = "randomtext here location 34 randomtexthere"
pattern = r'(?<=location )\d+' # match a number
# i.e. a digit (\d) then any more digits (+)
# Only if it comes after 'location '
# (but don't match that word)
if re.search(pattern, s): # Search for the pattern in the string
print(re.sub(pattern, '200', s)) # replace the pattern match with new number
else:
print("Number not found") # or print an error message
在您的情况下,请对文件中的每一行执行re.search。
答案 1 :(得分:0)
正则表达式可以做到这一点。拆分不起作用,因为您必须指定一个值。
import re
for line in document:
re.sub("\d{0,3}", replacementNumber, line)
这里我们遍历文件中的行,查找与我们传递给re.sub的模式匹配的字符串。我们告诉它要查找长度最多为3的任何数字[IE 123,23,1将计数]并将其替换为您在replacementNumber中提供的数字。
答案 2 :(得分:0)
像这样的东西,它可以做得更短(或更长),这里没有函数只是用一些其他随机整数替换整数的例子。如果需要遵循特定单词,请添加更多逻辑。
from random import randint
s = "randomtext here location 34 randomtexthere"
l = s.split(' ')
new_l = []
for el in l:
if el.isdigit():
new_l.append(randint(0, 99))
else:
new_l.append(el)
print(new_l)