【问题标题】:How do I get part of a string with a regex in Python [duplicate]如何在 Python 中使用正则表达式获取字符串的一部分 [重复]
【发布时间】:2021-03-10 19:50:27
【问题描述】:

我是 python 正则表达式的新手

我有一个字符串,它有一个我想从中提取的子字符串

我有以下模式:

 r = re.compile("(flag{.+[^}]})")

字符串是

Something has gone horribly wrong\n\nflag{Hi!}

我只想联系flag{Hi!}

我试过了:

a = re.search(r,string)

a = re.split(r,string)

这些方法都不起作用,如果我打印 a 我会得到 None

我怎样才能得到想要的标志。

提前致谢

【问题讨论】:

  • 如果您为尝试的 re.search 变体打印 a,则不会得到 None,请参阅 ideone.com/VczxK6 您可以将表达式简化为 flag{[^}]+} 并使用 print(a.group())跨度>

标签: python regex


【解决方案1】:
import re
str="Something has gone horribly wrong\n\nflag{Hi!}"
r = re.compile("(flag{.+[^}]})")
a = re.search(r,str)
print(a.group())

这行得通。

【讨论】:

    【解决方案2】:

    首先,如 cmets 中所述,您的输出不是 None。你确实得到了匹配,你正在寻找的匹配。你实际上得到了一个Match 对象,它跨越位置35 -> 44 并匹配flag{Hi!}。您可以使用group() 将匹配项表示为字符串:

    >>> a = re.search(r, string)
    >>> print(a.group())
    
    "flag{Hi!}"
    

    您还可以稍微缩短正则表达式。确实没有必要使用.+,因为当您添加[^}] 时它变得多余,它匹配所有不是右大括号的字符(}):

    "(flag{[^}]+})"
    

    如果您想匹配flag{} 之类的内容,您可以将匹配一个或多个*替换为匹配零个或多个+,其中大括号内没有字符。

    【讨论】:

      【解决方案3】:

      我们可以直接在字符串中搜索匹配的字符串。

      import re
      line = 'Something has gone horribly wrong\n\nflag{Hi!}'
      r = re.search("(flag{[^}]*})", line)
      print(r.group())
          
      Output:- 
      flag{Hi!}
      

      【讨论】:

        猜你喜欢
        • 2017-03-03
        • 2021-05-21
        • 2021-12-10
        • 2021-09-27
        • 2021-02-10
        • 1970-01-01
        • 2015-12-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多