2024-09-27 21:35:03 发布
网友
我有一个文本文件,每行都像这样-
GeneralBKT_n24_-e_dee_testcaseid_blt12_0001_s3_n4
每行都有关键字testcaseid,后跟一些测试用例id(在本例中,blt12_0001是id,s3和n4是一些参数)。我想从上面的行中提取blt12_0001。每个testcaseid之间正好有一个下划线'\u1'。对于这种情况,什么是regex,如何将测试用例id的名称存储在变量中。你知道吗
testcaseid
blt12_0001
s3
n4
您可以使用这个正则表达式来捕获以您的格式给出的testcaseid
(?<=testcaseid_)[^_]+_[^_]+
这实际上捕获了一个文本,它们之间正好有一个下划线,前面是testcaseid_文本,使用正向lookback。这里[^_]+捕获除下划线以外的一个或多个任意字符,后跟_,然后再次使用[^_]+捕获除_之外的一个或多个任意字符
testcaseid_
[^_]+
_
Check out this demo
看看这个Python代码
import re list = ['GeneralBKT_n24_-e_dee_testcaseid_blt12_0001_s3_n4', 'GeneralBKT_n24_-e_dee_testcaseid_blt12_0001_s6_n9'] for s in list: grp = re.search(r'(?<=testcaseid_)[^_]+_[^_]+', s) if grp: print(grp.group())
输出
blt12_0001 blt12_0001
您可以利用捕获组:
testcaseid_([^_]+_[^_]+)
见a demo on regex101.com。
Python
import re line = "GeneralBKT_n24_-e_dee_testcaseid_blt12_0001_s3_n4" for id in re.finditer(r'testcaseid_([^_]+_[^_]+)', line): print(id.group(1))
见a demo on ideone.com。你知道吗
另一个可行的办法是:
import re expression = r"[^_\r\n]+_[^_\r\n]+(?=(?:_[a-z0-9]{2}){2}$)" string = ''' GeneralBKT_n24_-e_dee_testcaseid_blt12_0001_s3_n4 GeneralBKT_n24_-e_dee_testcaseid_blt81_0023_s4_n5 ''' print(re.findall(expression, string, re.M))
['blt12_0001', 'blt81_0023']
jex.im可视化正则表达式:
如果您希望简化/修改/探索表达式,在regex101.com的右上面板中已经解释过了。如果您愿意,还可以在this link中查看它如何与一些示例输入匹配。你知道吗
您可以使用这个正则表达式来捕获以您的格式给出的testcaseid
这实际上捕获了一个文本,它们之间正好有一个下划线,前面是
testcaseid_
文本,使用正向lookback。这里[^_]+
捕获除下划线以外的一个或多个任意字符,后跟_
,然后再次使用[^_]+
捕获除_
之外的一个或多个任意字符Check out this demo
看看这个Python代码
输出
您可以利用捕获组:
见a demo on regex101.com。
在
Python
中许多可能的方法之一是见a demo on ideone.com。你知道吗
另一个可行的办法是:
输出
Demo
正则表达式电路
jex.im可视化正则表达式:
如果您希望简化/修改/探索表达式,在regex101.com的右上面板中已经解释过了。如果您愿意,还可以在this link中查看它如何与一些示例输入匹配。你知道吗
相关问题 更多 >
编程相关推荐