2015-10-07 88 views
-1

我可以按照原樣匹配模式。但是,我可以只搜索部分模式嗎?或者我必須再次單獨發送。 例如pattern = '/(\w+)/(.+?)' 我可以使用re.search搜索此模式,然後使用組獲取單個組。 但是我可以只搜索說(\w+)? 例如如何在正則表達式中搜索部分模式python

pattern = '/(\w+)/(.+?)' 
pattern_match = re.search(pattern, string) 
print pattern_match.group(1) 

我可以只搜索部分模式。例如pattern.group(1)或其他東西

+0

添加的是示例模式。我試圖匹配模式的一部分,而不單獨發送它 – user2661518

回答

1

你可以做一個正則表達式通過在非匹配組後跟一個?包裹它可選的任何部分,即(?: ... )?

pattern = '/(\w+)(?:/(.+))?' 

這將匹配以及/abc

在這兩個例子pattern_match.group(1)abc,但pattern_match.group(2)將在第一個和第二個空字符串def

更多參考,看看在特殊字符表(?:x)https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

編輯

改變了第二組(.+),因爲我假設你想匹配多個字符。 .+被稱爲「貪婪」匹配,儘可能匹配。另一方面,.+?是一個「懶惰」的匹配,只會匹配所需的最少字符數。在的情況下,這將僅匹配defd

0

該模式只是一個字符串;無論你想要發送所需的片。例如:

re.search(pattern[:6], string) 

只使用您模式的前6個字符。如果您需要檢測的第一圖案的結束 - 你有沒有插入右括號 - 您可以使用

rparen_pos = pattern.index(')') 
re.search(pattern[:rparen_pos+1], string) 

另一種可能性是

pat1 = '/(\w+)' 
pat2 = '/(.+?)' 
big_match = re.search(pat1+pat2, string) 
small_match = re.search(pat1, string) 

你可以得到表達更多的創新變量($ 1,$ 2等);請參閱下面的鏈接以獲取更多幫助。 http://flockhart.virtualave.net/RBIF0100/regexp.html https://docs.python.org/2/howto/regex.html

+0

感謝您的答案......第一個是硬編碼,第二個我們仍然通過2個模式。我想我必須發送2個模式。 – user2661518