我有以下行“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',)
答案 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
访问整个匹配。