不能用变量替换字符串?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (50)

我想出了下面的代码,它连续找到一个字符串并将该行复制到一个新文件中。我想Foo23用更动态的东西(即[0-9]等)替换,但我无法使用它,或变量或正则表达式。它不会失败,但我也没有结果。

with open('C:/path/to/file/input.csv') as f:
    with open('C:/path/to/file/output.csv', "w") as f1:
        for line in f:
            if "Foo23" in line:
                f1.write(line)
提问于
用户回答回答于

使用regex!

import re
pattern = r'([a-zA-Z]{3}\d{2})\b'
for line in f:
    if re.findall(pattern, line):
        f1.write(line)

这将匹配线,如'some line foo12''another foo54 line',但不是'a third line foo''something bar123'

分解:

pattern = r'(                  # start capture group, not needed here, but nice if you want the actual match back
             [a-zA-Z]{3}       # any three letters in a row, any case
                        \d{2}  # any two digits
            )                  # end capture group
            \b                 # any word break (white space or end of line)
           '

你可以使用:

matches = re.findall(pattern, f.read())  # finds all matches in f
f1.write('\n'.join(matches))  # writes each match to a new line in f1
用户回答回答于

你的问题归结为:“我希望确定字符串是否与模式X匹配,如果匹配,则将其输出到文件中”。实现这一目标的最好方法是使用reg-ex。在Python中,标准reg-ex库是re。所以

import re
matches = re.findall(r'([a-zA-Z]{3}\d{2})', line)

将此与文件IO操作相结合,我们有:

data = []
with open('C:/path/to/file/input.csv', 'r') as f:
     data = list(f)

data = [ x for x in data if re.findall(r'([a-zA-Z]{3}\d{2})\b', line) ]
with open('C:/path/to/file/output.csv', 'w') as f1:
    for line in data:
        f1.write(line)

扫码关注云+社区

领取腾讯云代金券