2015-10-14 132 views
0

我想對以下字符串使用正則表達式來獲取它的內容。正則表達式來獲取文本內的字符串

Dump Uuid 
size=16: 
00000000: 00 0C 5C 99 99 99 CB 11-BE 45 A9 63 DE 3A EF 36 *..\..S...E.c.:.6* 

我需要在字符串的中間,這將是00 0C 5C 99 99 99 CB 11-BE 45 A9 63 DE 3A EF 36的信息。 但是我對正則表達式並不熟悉,而且我知道我必須得到和以前*到目前爲止我知道':。* $'得到後,:但我不知道如何限制它直到*

謝謝。

+1

哪裏是在字符串*? – SirParselot

+0

請發佈一個清晰的輸入/輸出示例。即:「__i有這個_」和「__我需要這個_」。 –

+0

https://docs.python.org/2/library/re.html':([^ *] +)'會匹配':'和'*'之間的所有內容。這是一個補充字符集。 – Jasper

回答

0
s = '00000000: 00 0C 5C 99 99 99 CB 11-BE 45 A9 63 DE 3A EF 36 *..\..S...E.c.:.6*' 
# this will split the string into a list 
# ['00000000', ' 00 0C 5C 99 99 99 CB 11-BE 45 A9 63 DE 3A EF 36 ', '..\\..S...E.c.', '.6', ''] 
# next we apply the strings index in the list 

import re 
print(re.split(r'[:*]',s)[1]) 

00 0C 5C 99 99 99 CB 11-BE 45 A9 63 DE 3A EF 36 
-2

看着字符串,你不能使用拆分?

Yourtext.split( ':')

+0

'*'後面的部分怎麼樣? – Psytho

+0

@ Alex.S就像這樣'print string.split(':')[1] .split('*')[0]'不知道完整的解決方案是否值得期待,謝謝你的支持 – GreenThumb

0

你可以做這樣或那樣的

s = '00000000: 00 0C 5C 99 99 99 CB 11-BE 45 A9 63 DE 3A EF 36 * ....S...E.c.:.6*' 
mat = re.match(r'^.*: (.*) \*.*$', s) #get characters before :, group characters between : and *, match rest of string 
if mat: 
    print mat.group(1) 

00 0C 5C 99 99 99 CB 11-BE 45 A9 63 DE 3A EF 36 

,而不是整個字符串匹配,你可以使用搜索像這樣

mat = re.search(r': (.*) \*', s) 

00 0C 5C 99 99 99 CB 11-BE 45 A9 63 DE 3A EF 36 
+0

爲什麼downvote?這有要求的輸出 – SirParselot

+0

沒有downvote,但爲什麼'.match'而不是'.search'? – Jasper

+0

@Jasper Search只會返回匹配字符串的第一個匹配項,但它並不重要,因爲無論如何只會出現一個匹配項 – SirParselot

1

好假設它總是有相同的格式,你可以這樣做:

' '.join(text.split(' ')[1:-1]) 

text.split(': ')[1].split(' *')[0] 
0

如何使用''.split()

>>> myStr = '00000000: 00 0C 5C 99 99 99 CB 11-BE 45 A9 63 DE 3A EF 36 *..\..S...E.c.:.6*' 
>>> myOutput = myStr.split(':')[1].split('*')[0].strip() 

split(':')[1]給你' 00 0C 5C 99 99 99 CB 11-BE 45 A9 63 DE 3A EF 36 *..\..S...E.c.:.6*'然後split('*')[0]給你' 00 0C 5C 99 99 99 CB 11-BE 45 A9 63 DE 3A EF 36 ',然後strip()刪除開頭和結尾的空白,讓你獲得'00 0C 5C 99 99 99 CB 11-BE 45 A9 63 DE 3A EF 36'

0

要匹配或捕獲「一切都達到一定的字符「,我通常使用倒置字符集:[abc]將匹配abc[^abc]將匹配一切,但a,bc。所以模式

": ([^*]+)" 

將匹配前導冒號,後跟一個空格,後跟一個或多個「非星」。括號形成匹配組,使我們能夠只接入相關部分:

inputStr = '00000000: 00 0C 5C 99 99 99 CB 11-BE 45 A9 63 DE 3A EF 36 *..\..S...E.c.:.6*' 
print(re.search(": ([^*]+)", inputStr).group(1).strip()) 

'00 0C 5C 99 99 99 CB 11-BE 45 A9 63 DE 3A EF 36'