我正在尝试使用re
获取某些单词,因为我的代码会读取并打开文件列表。
import re
id_list = []
my_str = 'Error: Unable to version with file_id `a123-4567-89001` on server `serverA`'
match = re.search("file_id(.*)$", my_str)
if match:
out_list.append(match.group(1))
print list(set(id_list))
# Result : [' `a123-4567-89001` on server `serverA`']
虽然我似乎在后面的标记中得到了id,但同时我在file_id
字之后得到所有其他单词
如何编写代码来获取id代码,结果为a123-4567-89001
?
答案 0 :(得分:2)
我建议在file_id
之后匹配任何0+空格字符和反引号,然后匹配并捕获除了反引号之外的任何0 +字符到第1组:
file_id\s*`([^`]*)`
请参阅regex demo
<强>详情
file_id
- 文字子字符串\s*
- 0+ whitespaces `
- 反击([^`]*)
- 除了反击之外的任何0 +字符`
- 反击请参阅Python demo
import re
id_list = []
my_str = 'Error: Unable to version with file_id `a123-4567-89001` on server `serverA`'
match = re.search(r"file_id\s*`([^`]*)`", my_str)
if match:
id_list.append(match.group(1))
print list(set(id_list))
# => ['a123-4567-89001']
答案 1 :(得分:1)
在服务器上使用模式“file_id”(。*?)`(。*?)`“
>>> import re
>>> re.findall("file_id `(.*?)` on server `(.*?)`", 'Error: Unable to version with file_id `a123-4567-89001` on server `serverA`')
[('a123-4567-89001', 'serverA')]
答案 2 :(得分:1)
你可以试试这个:
import re
my_str = 'Error: Unable to version with file_id `a123-4567-89001` on server `serverA`'
the_id = re.findall('(?<=file_id\s\`)[a-z0-9-]+(?=\`)', my_str)[0]
输出:
'a123-4567-89001'
答案 3 :(得分:1)
由于string
中有两种情况需要反对,因此您需要提取file_id
之后的反对。
为此,我们搜索file_id
,然后匹配空格(\s
)字符,然后匹配反引号,然后捕获所有内容直到下一个反引号。
捕捉&#34;一切都是&#34;我们可以使用lazy quantifier
- 这实际上只涉及*?
,这意味着将此前的所有内容与?
之后的内容相匹配。
所以,把它放到一个正则表达式中,我们得到:
file_id\s`(.*?)`
效果很好:
>>> match = re.search("file_id\s`(.*?)`", my_str)
>>> match.group(1)
'a123-4567-89001'