2016-02-10 198 views
-2

我寫的驗證,如果特定模式的定字符串中存在的函數:正則表達式搜索不工作

import re 
def has_pattern(string, regex): 
    if string and re.compile(regex).search(string) is not None: 
     return True 
    return False 

但由於某種原因我的測試沒有顯示預期的結果:

# for absolute path on windows 
pattern = '^[a-zA-Z]:\\\\[^\\\\]' # actual regex: [a-zA-Z]:\\[^\\] 
path = 'a:\\' # for this result should be 'True' 
print('Pattern: \'{0}\''.format(pattern)) 
print('Result: {0}'.format(has_pattern(path, pattern))) 
+0

你的正則表達式是_requiring_後的第一個\另一個非\字符。請嘗試使用負向預覽。 –

+0

該問題缺乏要求。 –

+0

我在這篇文章後注意到了這一點。天啊這麼簡單:) – neuronalbit

回答

2

您的模式是在字符串的開頭尋找一個字母(大寫或小寫),後跟一個冒號,一個反斜槓,然後是另一個不是反斜槓的字符。

您的測試輸入不會以此非反斜槓字符結尾,因此與模式不匹配。

一種可能的模式適應是:

  • 正則表達式:^[a-zA-Z]:\\(?:$|[^\\])
  • 格式化爲Python字符串:^[a-zA-Z]:\\\\(?:$|[^\\\\])
+0

我誤解了我用過的[regex-checker](https://regex101.com/)的輸出。但是,無論如何感謝:) – neuronalbit

+0

解釋這不是一個解決方案。 regex101.com也可以做到這一點。 –

+0

這不是一個解決方案嗎?他問爲什麼他的正則表達式不能驗證給定的輸入。這就是爲什麼。 – Matthew