连字符

时间:2018-05-07 10:11:57

标签: regex python-2.7

我有以下行“Orig.750-52.00 and orig.3.99”,我想提取orig。从这一行3.99 我正在尝试使用以下代码

s = "Orig. 750-52.00 and orig. 3.99"
orig = re.compile(r"(orig.\s?[\d|\.]+)(?!-)", re.IGNORECASE)
if orig.search(s):
    print "Yes:", orig.search(s).groups()

输出:是:('Orig.75',)

1 个答案:

答案 0 :(得分:3)

您可以将数字模式添加到负前瞻模式中,以禁止回溯以产生不完整的数字匹配:

?

请参阅regex demo

<强>详情

  • orig\.\s*\d[\d.]*(?!-|\.?\d) - 一个orig\.子字符串(请注意,必须转义点以匹配文字点)
  • orig. - 0+空白字符
  • \s* - 数字后跟0+数字或\d[\d.]*字符
  • . - 如果有连字符或可选的(?!-|\.?\d),后面紧跟当前位置右侧的数字,则会导致匹配失败的否定前瞻。

请参阅Python demo

.

另外,请注意,没有必要重复import re s = "Orig. 750-52.00 and orig. 3.99" orig = re.compile(r"orig\.\s*\d[\d.]*(?!-|\.?\d)", re.IGNORECASE) m = orig.search(s) if m: print("Yes: {}".format(m.group())) # => Yes: orig. 3.99 搜索操作,您可以将正则表达式搜索结果分配给变量(请参阅orig.search(s)),然后在检查匹配数据对象之后不是m,请通过None访问整个匹配。