正则表达式在文本中获取字符串

时间:2015-10-14 14:29:14

标签: python regex

我试图在以下字符串上使用正则表达式来获取它的内容。

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。 但我对正则表达式并不熟悉,而且我知道我必须得到它:之前*到目前为止我知道' :。* $ '得到:,但我不知道如何限制它直到*

感谢。

6 个答案:

答案 0 :(得分:1)

假设它总是具有相同的格式:

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

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

答案 1 :(得分:1)

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 :(得分: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

答案 3 :(得分: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' 1}}

答案 4 :(得分:0)

为了匹配或捕获“某些特定字符”,我通常使用倒置字符集:[abc]将匹配abc[^abc]将匹配abc以外的所有内容。所以模式

": ([^*]+)"

将匹配前导冒号,然后是空白,然后是一个或多个“非星星”。括号形成一个匹配组,使我们只能访问相关部分:

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'

答案 5 :(得分:-2)

查看字符串,你能不能使用split?

Yourtext.split(':&#39)