所以我有一个字符串,我试图通过使用re.search进行搜索。该字符串由Id和后面的字符串组合而成。所以它看起来像这样:<@randomId> string after
我在"^@(|[WU].+?)>(.*)"
方法中使用正则表达式模式re.search
来尝试获取两个不同的组。第一组是id,减去< >
。所以它只是"@randomId"
。第二组将是Id之后的"string after"
文本。因此,如果我传入re.search
的文字是"<@QWE1234> do this"
,我想匹配并返回"@QWE1234"
和"do this"
。
使用我正在使用的正则表达式我得到的返回类型为None,当我将<
添加到正则表达式模式时,它看起来像这样:"^<@(|[WU].+?)>(.*)"
我得到整个字符串。
答案 0 :(得分:1)
要匹配2个捕获组,您可以从正则表达式中删除此部分|[WU]
并添加\s+
以考虑以下空白字符,这样您就不必修剪该匹配项。
你的正则表达式看起来像^<(@.+?)>\s+(.*)
或者您可以使用.+?
[^>]+
那就匹配
<
(@[^>]+)
使用否定的字符类在第1组和@
中捕获,然后不在>
中捕获>
\s+
匹配或更多空格字符(.*)
在第2组中捕获零个或多个字符(如果必须至少有一个字符,则可以使用.+
代替)如果您只想允许大写字符和数字,可以使用:
答案 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].+?)>(.*)"