2017-10-10 59 views
0

我有一個接受正則表達式的函數,然後對目標字符串進行常規exp匹配。在python中,正則表達式必須以'r'作爲前綴。我無法做到這一點。如何給傳遞的字符串加前綴'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無關緊要,但是後來我看到了另一個問題。如果我在匹配語句中對正則表達式進行硬編碼,它正在工作,但是如果我調用該函數並將其作爲字符串接收,然後在該函數中使用,則不起作用。我究竟做錯了什麼?

+0

看看https://stackoverflow.com/questions/2241600/python-regex-r-prefix – amrit

+2

[Python的正則表達式 - R的前綴]的可能的複製(https://stackoverflow.com/questions/2241600/ python-regex-r-prefix) –

回答

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) 
+0

謝謝chellya,所以唯一的問題是我沒有在傳遞給函數之前編譯模式,並且在函數接收之後 – Bavaraa

0

是的,我同意,我不需要「R」,因爲我沒有逃跑的晃動。當我調用具有match()函數的函數時,我傳遞'^ [a-zA-Z0-9] {3} _TREE'。在我收到並打印的函數中,我得到\^[a-zA-Z0-9] {3} _ECOLI(在前面附加一個反斜槓) 爲什麼會發生這種情況?