如何前缀' r'传递给

时间:2017-10-10 06:26:51

标签: python

我有一个接受正则表达式的函数,然后在目标字符串上进行常规exp匹配。在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并不重要,但后来我看到了另一个问题。如果我在匹配语句中硬编码正则表达式它正在工作,但是如果我调用该函数并将其作为字符串接收,然后在函数中使用它不起作用。我做错了什么?

2 个答案:

答案 0 :(得分:1)

只需传递参数就像普通函数一样,因为'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)

答案 1 :(得分:0)

是的我同意我不需要' r'因为我没有逃脱反叛。当我调用具有match()函数的函数时,我通过' ^ [a-zA-Z0-9] {3} _TREE'。在我收到它并打印的函数中我得到\ ^ [a-zA-Z0-9] {3} _ECOLI(前面附加一个反斜杠) 为什么会这样?