【问题标题】:Don't include part of the regex in searched string [duplicate]不要在搜索的字符串中包含正则表达式的一部分[重复]
【发布时间】:2019-09-24 13:26:25
【问题描述】:

我想使用一个正则表达式来搜索一个字符串,但在返回的(或匹配的)字符串中不包含正则表达式的一部分。

我想搜索并返回“CLD:”之后发生的内容,但不希望“CLD:”包含在返回的(或匹配的)字符串中。

cloudRegex = re.compile(r'CLD:\s.*')

从下面的文字中我希望返回 FEW040。

FF YBRFYMYX YMMCYMYX YSRFYMYX
061702 YBBNITAS
ATIS YBBN H   061702
RWY: 14
OPR INFO: RUNWAY 19 LEFT AVAILABLE AS PUR NOTAM.  MULTIPLE
TAXIWAY CLOSURES REFER NOTAMS. 
WND: 200/6
VIS: GREATER THAN 10 KM 
CLD: FEW040
+ TMP: 13
+ QNH: 1016

【问题讨论】:

  • 感谢维克托。与+匹配一个或多个。如果 the 是“CLD:”之后的第二个单词,这也可以吗?例如,FEW040 SCT050 将从 CLD 返回:FEW040 SCT050。
  • 我决定删除我的评论,因为我发现了一个专门解决同一问题的线程,即在特定关键字之后获取正则表达式匹配的一部分。 ideone.com/pxpeJN 应该返回之后的任何文本 CLD:
  • 仅供参考,我经常看到这个。没有必要在比赛中不包括 CLD。除非你能想到任何好的理由。没有什么说您必须实际使用组 0,它是 match 对象默认返回。只需获得第 1 组或第 2 组,或任何您想要的。使用 Python,除了查看断言之外,您别无选择。这一次,CLD:\s 是 Python 支持的固定长度。 90% 的时间它将是可变长度,这是 Python 不支持的。阅读您的标题的人可能会得到希望,但这不是希望,它只是 DOOM

标签: python regex


【解决方案1】:

您可以使用 positive lookbehind 来实现:

(?<=CLD:\s).*

这将匹配您示例中的字符串 FEW040,并且可以在 Regex101 上看到 here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-25
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多