【问题标题】:How to search part of pattern in regex python如何在正则表达式python中搜索部分模式
【发布时间】:2015-10-07 17:39:16
【问题描述】:

我可以按原样匹配模式。但是我可以只搜索模式的一部分吗?或者我必须再次单独发送。 例如pattern = '/(\w+)/(.+?)' 我可以使用 re.search 搜索此模式,然后使用 group 获取各个组。 但是我可以只搜索 (\w+) 吗? 例如

pattern = '/(\w+)/(.+?)'
pattern_match = re.search(pattern, string)
print pattern_match.group(1)

我可以只搜索模式的一部分吗?例如pattern.group(1) 什么的

【问题讨论】:

  • 添加的是示例模式。我正在尝试匹配部分模式而不单独发送它

标签: python regex python-2.7


【解决方案1】:

您可以通过将正则表达式的任何部分包装在一个不匹配的组中,后跟一个?,即(?: ... )?,从而使其成为可选部分。

pattern = '/(\w+)(?:/(.+))?'

这将匹配/abc/def 以及/abc

在这两个例子中pattern_match.group(1) 将是abc,但pattern_match.group(2) 在第一个例子中是def 而在第二个例子中是一个空字符串。

如需进一步参考,请查看https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions 特殊字符表中的(?:x)

编辑

将第二组更改为(.+),因为我假设您要匹配多个字符。 .+ 被称为“贪婪”匹配,它会尽量匹配。另一方面,.+? 是一个“惰性”匹配,仅匹配必要的最少字符数。在/abc/def 的情况下,这将只匹配来自defd

【讨论】:

    【解决方案2】:

    那个模式只是一个字符串;根据需要发送所需的切片。例如:

    re.search(pattern[:6], string)
    

    仅使用模式的前 6 个字符。如果你需要检测第一个模式的结尾——并且你没有中间的右括号——你可以使用

    rparen_pos = pattern.index(')')
    re.search(pattern[:rparen_pos+1], string)
    

    另一种可能是

    pat1 = '/(\w+)'
    pat2 = '/(.+?)'
    big_match = re.search(pat1+pat2, string)
    small_match = re.search(pat1, string)
    

    您可以使用表达式变量($1、$2 等)获得更多创新;请参阅下面的链接以获取更多帮助。 http://flockhart.virtualave.net/RBIF0100/regexp.html https://docs.python.org/2/howto/regex.html

    【讨论】:

    • 感谢您的回答...第一个是硬编码的,第二个我们仍在传递 2 个模式。我想我必须发送 2 个模式。
    猜你喜欢
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 2023-01-30
    相关资源
    最近更新 更多