使用regexp抓取指定的单词

时间:2017-12-12 19:58:55

标签: python regex

我正在尝试使用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

4 个答案:

答案 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'