1

我正在使用正则表达式来查找由连字符分隔的 8 位数字表示的任何和所有模式,如下所示:

(\d{8}\-\d{8}\)

我在 rubular.com (在线正则表达式编辑器)上粘贴了它,它似乎工作正常。但是,当我在我的 Python 代码中使用它时,我收到一个错误:SyntaxError: EOL while scanning string literal。我试着把反斜线从末端去掉。但是,虽然错误似乎已经消失,但正则表达式并没有找到该模式。我有一个嵌入了以下模式的字符串:

output = "... 57867983 - 87995423 ...."

我正在使用以下代码:

include re

regex = re.compile(r"\d{8}\-\d{8}\")

re.search(regex, outuput)

正则表达式不返回输出字符串中的模式。有人可以告诉我我做错了什么吗?谢谢!

这是我要匹配的实际字符串,它出现在返回的字符串中:

Hash\r\n\t\t01773857 - 90349912\r\n\tWork with

我是否需要在 8 位数字加上我想要匹配的连字符之前考虑任何字母数字字符?

4

3 回答 3

2

You have your last " escaped by \

You want:

regex = re.compile(r"\d{8}\-\d{8}")

EDIT - Based on your updated question it looks like you need to account for spaces before your dash:

regex = re.compile(r"\d{8}\s*\-\s*\d{8}")
于 2013-03-25T19:12:25.707 回答
2

您的数据与您的模式不匹配:

57867983 - 87995423 

是 8 位数字,后跟一个空格,后跟一个连字符,然后是一个空格,然后是 8 位数字。

所以你的模式应该是:

r"\d{8} - \d{8}"

如果空格是可选的,则:

r"\d{8} *- *\d{8}"

这意味着“零个或多个空格”。顺便说一句,连字符不是外面的特殊字符[ ],所以不需要转义。

编辑:这是一个更完整的例子:

import re

regex = re.compile(r"(\d{8}) - (\d{8})")

outuput = "Hash\r\n\t\t01773857 - 90349912\r\n\tWork with"

m = re.search(regex, outuput)

if m: print("Found:",m.groups())

给出:

Found: ('01773857', '90349912')
于 2013-03-25T19:13:50.900 回答
1
import re
regex = re.compile(r'(\d{8}\s*\-\s*\d{8})')
found = re.search(regex, "11111111-01234567")
print found.group(0)
found = re.search(regex, "22222222 - 01234567")
print found.group(0)
于 2013-03-25T19:16:14.497 回答