查看

时间:2017-12-15 05:18:08

标签: python regex

我正在以这种格式字符串提取数字。

  • AB1234
  • AC1234
  • AD1234

如您所见,A始终存在,第二个字符排除"。我在下面写下代码来提取数字。

re.search(r'(?<=A[^"])\d*',input)

但我遇到了错误。

  

后视需要固定宽度模式

有没有方便的方法来提取数字?现在我知道如何搜索两次以获得它们。谢谢。

注意A是一种模式,实际上A是长字符串中的世界。

2 个答案:

答案 0 :(得分:3)

您示例中的正则表达式有效,因此我猜测您的实际模式具有可变宽度字符匹配(*+等)。不幸的是,正则表达式看起来不支持那些。我可以建议作为替代方案,使用捕获组并提取匹配的字符串 -

m = re.search(r'A\D+(\d+)', s)
if m:
    r = m.group(1)

<强>详情

A      # your word 
\D+    # anything that is not a digit
(      # capture group
\d+    # 1 or more digits
)

如果你想处理双引号,你可以通过包含一个字符类对正则表达式稍作修改 -

r'A[^\d"]+(\d+)'

答案 1 :(得分:0)

使用此正则表达式代替:

re.search(r'(?=A[^"]\d*)\d*',input)