我遵循正则表达式,需要使用 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/',)
最佳答案
您可以使用
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/
关于python - 如何忽略一组字符直到遇到正则表达式中的指定字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54035589/