角色一个特定的模式后,正则表达式来获得

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+]+)*\[*([^][()]+)

regex demo

细节

  • # - 井号
  • (?:\[+\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

以上是关于角色一个特定的模式后,正则表达式来获得的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性

python基础学习(十三)

python基础学习笔记(十三)

如何使用 nltk 正则表达式模式来提取特定的短语块?

markdown 正则表达式模式片段

正则表达式 - 如何匹配除特定模式之外的所有内容