2013-07-10 50 views
0

當我使用正則表達式匹配使用Python的某個字符串時,遇到了一個問題。在Python中正則表達式匹配中連續跳轉字符串

例字符串:

LN [1] - 這是一個string--

LN [2]符合以下線。

LN [3] - 這是一個string--

LN [4]匹配這一行從這裏開始。

LN [5] - 這是在最終

我想要的字符串中提取ABC以上。

代碼:

pattern = re.compile('%s(.*?)%s' % ('--This is a string--', '-This is the end-')) 
re.findall(pattern, string) 

我怎樣才能行4只,而不是讓2號線到4號線?

非常感謝。

+0

你的正則表達式說'*' - 它是什麼,你打算? – devnull

+2

公平地說,'abc'會起作用。 –

+0

正則表達式引擎從左到右工作,所以您的正則表達式在遇到第一個「a」時開始匹配,然後保持匹配直到達到「c」。如果你不想允許多個'a',你需要告訴正則表達式引擎。 –

回答

2

也許,通過該:

pattern = re.compile('.*(a.*?c)') 
re.findall(pattern, string) # yields ["abc"] 
2
>>> re.findall('a[^a]*c', 'aaaaaaaaabc') 
['abc'] 
>>> re.findall('a[^a]*c', 'aaaaaaaaa c') 
['a c'] 
1

如果你想更換,你可以使用ID或命名組重複字符的所有實例。

例子:

與ID:

>>> re.sub('(.)(\\1)+', '\\1', 'abcAAAAabcBBBBabcCCCCabc') 
'abcAabcBabcCabc' 

用名:?

>>> re.sub('(?P<n>.)(?P=n)+', '\\1', 'abcAAAAabcBBBBabcCCCCabc') 
'abcAabcBabcCabc' 
相關問題