2017-01-19 78 views
-3

而不是打印整個「最後的」判決它僅打印‘P’任何人都可以在這裏幫助正則表達式打印的第一個字符

final = r'print "\n^^^###***===TP test result: $final_verdict===***###^^^\n";' 
searchObj = re.compile(r'[\w\s\"\n\^\^\^\#\#\#\*\*\*\=\=\=\w+\s\w+\:\s\$\w+\=\=\=\#\#\#\*\*\*\^\^\^\n\"\;]') 
print(searchObj) 
y=searchObj.match(final) 
if y: 
    print("Found",y.group()) 
else: 
    print("Nothing") 

結果:

re.compile('[\\w\\s\\"\\n\\^\\^\\^\\#\\#\\#\\*\\*\\*\\=\\=\\=\\w+\\s\\w+\\:\\s\\$\\w+\\=\\=\\=\\#\\#\\#\\*\\*\\*\\^\\^\\^\\n\\"\\;]') 

找到p

+1

您的範圍只匹配1個字符。考慮在右括號後加'+'......還考慮原始前綴以避免加倍反斜槓...... –

+0

@ Jean-FrançoisFabre:我認爲他的意圖不是定義一個字符組。 –

回答

2

你已經把正方括號括在你的正則表達式中,這意味着你定義了一個字符組,你應該刪除這些:

r'\w\s\"\n\^\^\^\#\#\#\*\*\*\=\=\=\w+\s\w+\:\s\$\w+\=\=\=\#\#\#\*\*\*\^\^\^\n\"\;' 

通過使用字符組,您說:方括號之間的任何字符。所以[ab]表示:ab,而不是a其次是b

但是現在你的字符串不再匹配了(當然比單個字符更難匹配一個序列)。但是,您可以將其改進爲:

r'\w\s\"\\n\^\^\^###\*\*\*===\w+\s\w+\s\w+:\s\$\w+===\*\*\*###\^\^\^\\n\";' 
#  ^  ^^^  ^^^  ^^^^^  ^^^  ^^^ ^

第二行上的carrets顯示更改。首先你不需要轉義#=,而且你指定\n哪個Python看作是一個換行符,但是你想匹配\n(兩個字符),所以你需要轉義反斜槓,所以\\n;最後你忘記了冒號前有三個單詞(:)。

您可以使用此regex101測試和修改您的正則表達式。

+1

你不需要轉義'#'和':'和'='字符。它使一個更清晰的表達... –

+0

@ Jean-FrançoisFabre:以及OP忘記逃脫'\'以及正則表達式不匹配,我正在改進版本。 –

+0

regex101幫助解決了這個問題。謝謝大家的迴應。 –

相關問題