角色一个特定的模式后,正则表达式来获得
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了角色一个特定的模式后,正则表达式来获得相关的知识,希望对你有一定的参考价值。
输入字符串:
-line[8qWWQ5-swd-WER-DWDS]]<-SUCCESS#[14][MY_SAMPLE_TEST]
-line[8qWWQ5-swd-WER-DWDS]]<-SUCCESS#[4][MY_SAMPLE_TEST2]
-line[8qWWQ5-swd-WER-DWDS]]<Failed#[17][[14]SERVERERROR(TYPE-241)
预期输出:
MY_SAMPLE_TEST
MY_SAMPLE_TEST2
SERVERERROR
我的正则表达式:(?<=#).*
上述正则表达式,我可以得到#之后的一切,也是我尝试:
rex = (?<=#\[...\[).*(?=])
这给了我正确的输出的第一行即:MY_SAMPLE_TEST但由于2号线只有个位数即4所以它不匹配,类似的问题,3号线
它可以编写一个表达式,可以得到所需要的放出来? ,任何帮助将是巨大的
答案
您可以使用捕捉这些值
#(?:\[+\d+]+)*\[*([^][()]+)
细节
#
- 井号(?:\[+\d+]+)*
- 0或多次重复的:\[+
- 1+[
字符\d+
- 1+数字]+
- 1+]
字符- qazxsw POI - 0+ qazxsw POI图表
\[*
- 第1组:比[
,([^][()]+)
,(
和)
其他的一个或多个字符
[
:
]
输出:
Python demo
另一答案
做一个假设,即匹配的字符串应该结束它找到一个闭合之前]或开始(字符这里是工作的正则表达式:
import re
strs = ['-line[8qWWQ5-swd-WER-DWDS]]<-SUCCESS#[14][MY_SAMPLE_TEST]', '-line[8qWWQ5-swd-WER-DWDS]]<-SUCCESS#[4][MY_SAMPLE_TEST2]', '-line[8qWWQ5-swd-WER-DWDS]]<Failed#[17][[14]SERVERERROR(TYPE-241)']
rx = re.compile(r'#(?:\[+\d+]+)*\[*([^][()]+)')
for s in strs:
m = rx.search(s)
if m:
print(m.group(1))
它的工作就没有假设空格或下划线的文本要提取提供样品。这里是一个演示链接:MY_SAMPLE_TEST
MY_SAMPLE_TEST2
SERVERERROR
以上是关于角色一个特定的模式后,正则表达式来获得的主要内容,如果未能解决你的问题,请参考以下文章