如何使用Python在文档中的字符串后搜索整数?

时间:2017-05-26 02:45:58

标签: python

我有一个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='')

3 个答案:

答案 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)