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

标签 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/',)

最佳答案

您可以使用

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/

相关文章:

python - 如何从内部装饰器类访问类的实例?

python - 从 C++ 应用程序中的嵌入式 Python 调用时,多数组扩展库上的 Numpy 导入失败

java - 使用正则表达式java查找两个连续的单词/字符串(包括标点符号)

c# - 用于匹配 C# 字符串文字的正则表达式

python - 心电信号滤波

python - 导入错误 : cannot import name NUMPY_MKL

python - opencv haar文件返回太多面部特征

python - Pandas 广泛的 'describe' 包括计算空值

python - 欧元、英镑和美元价格的正则表达式

python - 如何更新和访问字典中字典的子键 [python]