Python Can';t用变量替换字符串

Python Can';t用变量替换字符串,python,regex,variables,Python,Regex,Variables,我想出了下面的方法,在一行中找到一个字符串,并将该行复制到一个新文件中。我想用更动态的东西(例如[0-9],等等)来替换Foo23,但我无法让它、变量或正则表达式工作。它没有失败,但我也没有得到任何结果。帮忙?谢谢 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 "Fo

我想出了下面的方法,在一行中找到一个字符串,并将该行复制到一个新文件中。我想用更动态的东西(例如[0-9],等等)来替换
Foo23
,但我无法让它、变量或正则表达式工作。它没有失败,但我也没有得到任何结果。帮忙?谢谢

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)

根据您的评论,您希望在出现任何三个字母后跟两个数字时匹配行,例如
foo12
bar54
。使用正则表达式

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'
'other foo54 line'
这样的行,但不匹配
'a third line foo'
'something bar 123'

细分:

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)
           '
如果您真正需要的是将文件中的所有匹配项写入
f1
,则可以使用:

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

根据您的评论,您希望在出现任何三个字母后跟两个数字时匹配行,例如
foo12
bar54
。使用正则表达式

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'
'other foo54 line'
这样的行,但不匹配
'a third line foo'
'something bar 123'

细分:

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)
           '
如果您真正需要的是将文件中的所有匹配项写入
f1
,则可以使用:

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)

请注意,我分割了文件IO操作以减少嵌套。我还删除了IO外部的过滤。一般来说,为了便于测试和维护,代码的每一部分都应该做“一件事”。

本质上,您的问题归结为:“我想确定字符串是否与模式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)


请注意,我分割了文件IO操作以减少嵌套。我还删除了IO外部的过滤。一般来说,代码的每一部分都应该做“一件事”,以便于测试和维护。

您试图编写的动态内容是什么?正如代码所示,您正在测试该行是否有“Foo23”,如果有则打印它。所有其他行都将被忽略。@malan在正则表达式下,我要搜索的是任何包含
r“[A-Za-z][A-Za-z][A-Za-z]\d\d”
…的行,但我无法使其或变量或正则表达式起作用。
-请阅读。向我们展示您尝试执行的不起作用的操作-包括一个示例输入字符串。@physlexic:您不知道要使用什么模块和命令来搜索
r“[A-Za-z][A-Za-z][A-Za-z]\d\d”
尝试
导入re
,然后测试
如果re.search(r“[A-Za-z][A-Za-z][A-Za-z]\d\d”,第行):
@malan抱歉,也许我应该解释得更好,但在我最初的问题中,我所说的
或regex
,是指我确实尝试了
导入re
等。等等。你想写的动态东西是什么?正如代码所示,您正在测试该行是否有“Foo23”,如果有则打印它。所有其他行都将被忽略。@malan在正则表达式下,我要搜索的是任何包含
r“[A-Za-z][A-Za-z][A-Za-z]\d\d”
…的行,但我无法使其或变量或正则表达式起作用。
-请阅读。向我们展示您尝试执行的不起作用的操作-包括一个示例输入字符串。@physlexic:您不知道要使用什么模块和命令来搜索
r“[A-Za-z][A-Za-z][A-Za-z]\d\d”
尝试
导入re
,然后测试
如果re.search(r“[A-Za-z][A-Za-z][A-Za-z]\d\d”,第行):
@malan抱歉,也许我应该解释得更好,但在我最初的问题中,我所说的
或regex
是指我确实尝试了
导入re
等。这种模式不需要f字符串。
\w{3}
将匹配的不仅仅是3个字母。为什么有变量
我的字符串
,这不是我的错used@DillonDavis从以前版本的答案,我改变了。现在删除它,谢谢。@physlexic查看我的更新。如果您只想从文件中获取所有匹配项,那么就更容易了!此模式不需要f字符串。
\w{3}
将匹配的不仅仅是3个字母。为什么有变量
my\u string
,它不是used@DillonDavis从以前版本的答案,我改变了。现在删除它,谢谢。@physlexic查看我的更新。如果您只想从文件中获取所有匹配项,那么就更容易了!