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

2024-09-29 19:24:15 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我需要使用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/',)

Tags: re内容outputsearchmatchwebsiteresultide
1条回答
网友
1楼 · 发布于 2024-09-29 19:24:15

你可以用

r"\s*susa\s[^@]+(\S+)"

详细信息:

  • \s*-0+空格
  • susa-a susa子串
  • \s-a空白
  • [^@]+-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/

相关问题 更多 >

    热门问题