1

次のように、正規表現を使用して、ハイフンで区切られた8桁で示されるすべてのパターンを検索しています。

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

これをrubular.com(オンライン正規表現エディター)に貼り付けましたが、正常に機能しているようです。ただし、Pythonコードで使用すると、次のエラーが発生します。SyntaxError:文字列リテラルのスキャン中にEOLが発生します。最後に円記号を外してみました。しかし、エラーはなくなったように見えますが、正規表現はパターンを見つけられません。次のパターンが埋め込まれた文字列があります。

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

あなたはあなたの最後の"脱出を持っています\

あなたが欲しい:

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

編集-更新された質問に基づくと、ダッシュの前にスペースを考慮する必要があるようです。

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 に答える