Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取与模式匹配的字符串_Python_Regex_Python 3.x - Fatal编程技术网

Python 获取与模式匹配的字符串

Python 获取与模式匹配的字符串,python,regex,python-3.x,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 我想获取上面字符串中

我有一个这样的文本-

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
我想获取上面字符串中的文档id,如下所示

2b837c02-40c9-4d33-b81b-d489a06fa302
Id具有特定的模式-

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

上面的字符串有其他类似的ID,但我感兴趣的是在子字符串
document2id
之后获取模式。同样,此字符串不是固定的,任何类型的数字、字符串或空白都可以在
文档
ID

之间使用
重新搜索

演示:

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
输出:

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

这个正则表达式应该符合您的要求

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

你也可以不用正则表达式。这只是一个代码高尔夫

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)

一般来说,字符串看起来像是具有预定义长度的元素,如果是这样,您应该能够只取一个特定的片段,或者如果使用制表符,只需按制表符拆分,但这只是一个假设。

到目前为止您尝试了什么?从外观上看,您正在寻找UUID,因此字符不是字母数字,而是十六进制字符串子集(
[0-9a-f]
),因此正确的模式应该是:
[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}
。对不区分大小写的UUID使用不区分大小写的标志。