我遵循的正则表达式需要使用re.match
进行匹配。我首先需要匹配“ susa”,并忽略直至“ @”符号(不包括它)的所有内容,并捕获其后的所有内容。但是,当我尝试使用re.search
获取输出时,它不匹配。为什么我没有得到想要的输出? re.match
实际上与输出匹配吗? (我无法检查,因为它只提供了内存位置)。谢谢。
import re
output = 'susa ssh://user@internal.website.ide.company.uk/du33/abo33/ohs231/stk/projects/project1/'
url_match = re.match("\s*susa\s+[^(/.+?(?=@)/)]+([^ ]+)", output)
Result = re.search("\s*susa\s+[^(/.+?(?=@)/)]+([^ ]+)", output)
if Result:
print Result.groups()
In [29]: runfile('/home/user/Desktop/python_practise/match_urls.py', wdir='/home/user/Desktop/python_practise')
('//user@internal.website.ide.company.uk/du33/abo33/ohs231/stk/projects/project1/',)
答案 0 :(得分:0)
您可以使用
r"\s*susa\s[^@]+(\S+)"
详细信息:
\s*
-超过0个空格susa
-一个susa
子字符串\s
-空格[^@]+
-除@
以外的1个以上的字符([^...]
是negated character class,与该类中指定的字符以外的任何字符匹配)(\S+)
-捕获第1组:一个或多个非空白字符。要获取第1组中的值,请使用url_match.group(1)
。
请参见Python demo:
import re
output = 'susa ssh://user@internal.website.ide.company.uk/du33/abo33/ohs231/stk/projects/project1/'
url_match = re.match(r"\s*susa\s[^@]+(\S+)", output)
if url_match:
print(url_match.group(1))
# => @internal.website.ide.company.uk/du33/abo33/ohs231/stk/projects/project1/
Result = re.search(r"\s*susa\s[^@]+(\S+)", output)
if Result:
print(Result.group(1))
# => @internal.website.ide.company.uk/du33/abo33/ohs231/stk/projects/project1/