2017-10-10 27 views
0

正規表現を受け取り、その後ターゲット文字列に正規表現一致を行う関数があります。 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は問題ではありませんが、別の問題があります。私はmatchステートメントで正規表現をハードコーディングしている場合は動作していますが、関数を呼び出して文字列として受け取った後、関数内で使用すると機能しません。私は間違って何をしていますか?

+0

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

+2

[Python regex -r prefix](https://stackoverflow.com/questions/2241600/)の重複が考えられます。 python-regex-r-prefix) –

答えて

1

通常の関数のように引数を渡すだけでOKです。なぜなら、 'r'という接頭辞は生の文字列を宣言していて、バックスラッシュをエスケープして通常のstr型に変換するからです。

この特定の例では、「r」は実際には必要ありません。 はい、私はエスケープガタを持っていないとして、私は「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

を試してみてください。 match()関数を持つ関数を呼び出すと、 '^ [a-zA-Z0-9] {3} _TREE'を渡します。関数を受け取って印刷すると\^[a-zA-Z0-9] {3} _ECOLI(バックスラッシュが前面に追加されています) なぜこのようなことが起こっていますか?

関連する問題