获取匹配模式

时间:2018-05-18 11:25:43

标签: python regex python-3.x

我有这样的文字 -

EventTimestamp        H 9EventType 8document 2ID  2b837c02-40c9-4d33-b81b-d489a06fa302-DCUP  LogToAuditTrail  SourceAppCD 5DOCSV  SourceAppUID  2b837c02-40c9-4d33-b81b-d489a06fa302 6UserID  5a8ce656-1a31-456b-b3dd-5ec0859c9f3e1

我想获取上面字符串中出现的document-id

2b837c02-40c9-4d33-b81b-d489a06fa302

Id具有特定模式 -

<8characters(alpha numeric)> - <4characters(alpha numeric)> - <4characters(alpha numeric)> - <4characters(alpha numeric)> - <12characters(alpha numeric)>

上面的字符串有其他类似的ID,但我有兴趣在子字符串document 2ID之后获取模式。再次,这个字符串不固定任何类型的数字,字符串或空格可以介于document&amp; ID

3 个答案:

答案 0 :(得分:1)

使用re.search

<强>演示:

import re
s = "EventTimestamp        H 9EventType 8document 2ID  2b837c02-40c9-4d33-b81b-d489a06fa302-DCUP  LogToAuditTrail  SourceAppCD 5DOCSV  SourceAppUID  2b837c02-40c9-4d33-b81b-d489a06fa302 6UserID  5a8ce656-1a31-456b-b3dd-5ec0859c9f3e1"
m = re.search(r"document\s*\d+ID\s+([A-Za-z0-9\-]{36})", s)
if m:
    print(m.group())
    print(m.group(1))

<强>输出:

document 2ID  2b837c02-40c9-4d33-b81b-d489a06fa302
2b837c02-40c9-4d33-b81b-d489a06fa302

答案 1 :(得分:0)

此正则表达式应符合您的要求。

((?:[A-z]|\d){8}-(?:(?:[A-z]|\d){4}-){3}(?:[A-z]|\d){12}-(?:[A-z]|\d){4})

答案 2 :(得分:0)

你也可以在没有正则表达式的情况下完成。这只是一个代码高尔夫。

source = "EventTimestamp        H 9EventType 8document 2ID  2b837c02-40c9-4d33-b81b-d489a06fa302-DCUP  LogToAuditTrail  SourceAppCD 5DOCSV  SourceAppUID  2b837c02-40c9-4d33-b81b-d489a06fa302 6UserID  5a8ce656-1a31-456b-b3dd-5ec0859c9f3e1"
document_loc = value.find('document')
value = value[document_loc:]
id_loc = value.find('ID')
value = value[id_loc:].split()[1]
print(value)

通常,字符串看起来像预定义的元素长度,如果是这样,你应该只能采取一个特定的切片,或者如果使用了标签,只需在标签字符上拆分,但这只是一个假设。