如何为传递的字符串加前缀“r”

2024-04-26 06:33:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数,它接受正则表达式,然后对目标字符串执行正则表达式匹配。在python中,正则表达式必须以“r”作为前缀。我不能那样做。你知道吗

r^[a-zA-Z0-9]{3}_TREE is what I want to get. My function receives '^[a-zA-Z0-9]{3}_TREE' 

如果我这样做了

'r'+ '^[a-zA-Z0-9]{3}_TREE' then it 'r' also becomes string which is not.

你能帮帮我吗?你知道吗

但是我的正则表达式没有转义序列,所以使用r并不重要,但是我看到了另一个问题。如果我在match语句中对regex进行硬编码,它就工作了,但是如果我调用函数并将其作为字符串接收,然后在函数中使用它,它就不工作了。我做错什么了?你知道吗


Tags: to函数字符串tree目标getismy
2条回答

只需像普通函数一样传递参数就可以了,因为'r'前缀声明了一个原始字符串,它只是转义反斜杠并转换为普通的str类型。你知道吗

对于这个特殊的例子,实际上不需要“r”。 试试看

import re
pattern1 = "^[a-zA-Z0-9]{3}_TREE"
pattern2 = r"^[a-zA-Z0-9]{3}_TREE"
txt1 = "AVL_TREE"
txt2 = "WHAT IS AVL_TREE"
pattern = re.compile(pattern1)
print(pattern.findall(txt1))
print(pattern.findall(txt2))

pattern = re.compile(pattern2)
print(pattern.findall(txt1))
print(pattern.findall(txt2))

def my_regex(pattern,txt):
    pattern = re.compile(pattern)
    print(pattern.findall(txt))

my_regex(pattern1,txt1)
my_regex(pattern1,txt2)
my_regex(pattern2,txt1)
my_regex(pattern2,txt2)

是的,我同意我不需要“r”,因为我没有逃逸反睫毛。当我调用具有match()函数的函数时,我传递“^[a-zA-Z0-9]{3}\u TREE”。在函数中,当我收到它并打印时,我得到\^[a-zA-Z0-9]{3}\u ECOLI(前面加了一个反斜杠) 为什么会这样?你知道吗

相关问题 更多 >