【发布时间】:2017-12-16 22:59:42
【问题描述】:
我需要匹配如下字符串:
RHS 号码X 号码X 号码
包含在这样的字符串中:(所有数字都可以有或没有小数部分)
foo RHS 100x100x10 foo
foo RHS 100.0x100x10 foo
foo RHS 100.0x100.0x10.0 foo
foo RHS 100x100.0x100x10 foo
foo RHS 10.0x100.0x10.0x10.0 foo
我写了这个:
右轴\d+.?\d?x\d+.?\d?x\d+.?\d
但是这个正则表达式也匹配以下字符串的第一组数字: 富 RHS 100x100x100x10 富
我怎样才能避免这种情况? 如果有四组数字,基本上我不想要任何匹配
【问题讨论】:
-
您需要添加
negativ lookahead- 这是@WiktorStribiżew 提供的。它将直接查看字符串 after 您的匹配项,如果否定前瞻找到您定义的模式,则丢弃整个匹配项。看看这个:stackoverflow.com/questions/4736/learning-regular-expressions/… -
好像几个词的边界就可以解决这个问题,试试
r'\bRHS \d+(?:\.\d+)?(?:x\d+(?:\.\d+)?){2}\b',但仔细看会有点复杂。 -
如果您只想使用 your 正则表达式并避免匹配您提供的最后一个示例输入中的子字符串,请尝试
RHS \b(?!\d+(?:x\d+){3})\d+\.?\d?x\d+\.?\d?x\d+\.?\d。使用负前瞻,所有具有 4 个整数部分的 RHS 都将失败。
标签: python regex regex-negation