正则表达式结束搜索特定字符

时间:2018-06-08 13:40:03

标签: python regex search

所以我有一个字符串,我试图通过使用re.search进行搜索。该字符串由Id和后面的字符串组合而成。所以它看起来像这样:<@randomId> string after

我在"^@(|[WU].+?)>(.*)"方法中使用正则表达式模式re.search来尝试获取两个不同的组。第一组是id,减去< >。所以它只是"@randomId"。第二组将是Id之后的"string after"文本。因此,如果我传入re.search的文字是"<@QWE1234> do this",我想匹配并返回"@QWE1234""do this"

使用我正在使用的正则表达式我得到的返回类型为None,当我将<添加到正则表达式模式时,它看起来像这样:"^<@(|[WU].+?)>(.*)"我得到整个字符串。

3 个答案:

答案 0 :(得分:1)

要匹配2个捕获组,您可以从正则表达式中删除此部分|[WU]并添加\s+以考虑以下空白字符,这样您就不必修剪该匹配项。

你的正则表达式看起来像^<(@.+?)>\s+(.*)

或者您可以使用.+?

代替[^>]+

<(@[^>]+)>\s+(.*)

那就匹配

  • 匹配<
  • (@[^>]+)使用否定的字符类在第1组和@中捕获,然后不在>中捕获
  • 匹配>
  • \s+匹配或更多空格字符
  • (.*)在第2组中捕获零个或多个字符(如果必须至少有一个字符,则可以使用.+代替)

Demo

如果您只想允许大写字符和数字,可以使用:

<(@[0-9A-Z@]+)>\s+(.*)

答案 1 :(得分:0)

^匹配字符串的开头,因此您希望自己的模式为"^<@(|[WU].+?)>(.*)""@(|[WU].+?)>(.*)"。请注意,模式比它需要的要复杂一点,"^<@(.+?)>(.*)"应该起作用。您可能还想拉出组内的@,因为这样会匹配您描述的输出。

那么你的代码就像:

match = re.search(r"^<(@.+?)>(.*)")
if match is None: 
   pass # handle the case that it is not found
else:
   randomId = match.groups(1)
   textAfter = match.groups(2)

答案 2 :(得分:0)

所以正则表达式<ui:component xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:cc="http://xmlns.jcp.org/jsf/composite" > <cc:interface> ... </cc:interface> <cc:implementation> ... </cc:implementation> </ui:component> 是正确的,但我没有从re.search方法返回正确的搜索组。我必须指定"^<@(|[WU].+?)>(.*)"