如何忽略一组字符,直到在正则表达式中遇到指定的字符?

时间:2019-01-04 08:45:40

标签: python regex python-2.7

我遵循的正则表达式需要使用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/',)

1 个答案:

答案 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/