2

テキスト (実際にはたくさんのテキスト) がある場合、どこかに 1 つの ISBN が含まれているので、それを見つけなければなりません。

私の ISBN-13 は「978」で始まり、その後に 10 桁が続きます。

私は知りません:「-」(マイナス)がいくつあり、それらが正しい場所にあるかどうか。

私のコードは、マイナスのない ISBN のみを見つけます。

regex=r'978[0-9]{10}'
pattern = re.compile(regex, re.UNICODE)
for match in pattern.findall(mytext):
    print(match)

しかし、次のような ISBN を見つけるにはどうすればよいですか。

  • 978-123-456-789-0
  • 978-1234-567890
  • 9781234567890
  • 等...

これは1つの正規表現パターンで可能ですか?

ありがとう!

4

6 に答える 6

2

これは 10 桁に一致し、それぞれの前に 1 つのオプションのハイフンを許可します。

regex = r'978(?:-?\d){10}'
于 2013-08-14T08:52:12.433 に答える
2

2 つの連続したハイフンを使用することはできず、数字で終わる必要があるため:

r'978(-?\d){10}'

... then の直後にハイフンを許可し、978すべてのハイフンの後に数字を義務付け (ハイフンで終わらない)、各ハイフンをオプションにすることで連続した数字を許可します。

ISBN が周囲のテキストから十分に分離されていることを確認するために、の\b前後に を追加します。978{10}

?:また、左括弧の直後に追加して、それらをキャプチャしないようにし (パフォーマンスがわずかに向上し、表現力も向上します)、次のようにします。

r'\b978(?:-?\d){10}\b'

于 2013-08-14T09:18:26.397 に答える
1

-すべての数字と文字を一致させることができます。その場合、何文字が見つかるかわかりません:

regex=r'978[\d\-]+\d'
pattern = re.compile(regex, re.UNICODE)
for match in pattern.findall(mytext):
    print(match)

ISBN が他の数字やハイフンに挟まれていると問題が発生しますが、はっきりと区切られている場合は心配ありません :)

編集: 最初のコメントによると、ISBN が数字で終わることがわかっているため、正規表現の最後に余分な \d を追加できます (すぐ下のコードを更新しました)。

于 2013-08-14T08:48:13.590 に答える
1

-正規表現のパターンに文字を追加するのはどうですか? -このようにして、(number または)x10 回の任意の組み合わせを探します。

regex=r'978[0-9\-]{10}'

使ったほうがいいかもしれませんが

regex=r'978[0-9\-]+'

それ以外の場合、使用{10}して一部-が見つかった場合、すべての数字が見つかるわけではないためです。

テスト

>>> import re
>>> regex=r'978[0-9\-]+'
>>> pattern = re.compile(regex, re.UNICODE)
>>> mytext="978-123-456-789-0"
>>> for match in pattern.findall(mytext):
...     print(match)
... 
978-123-456-789-0
>>> mytext="978-1234-567890"
>>> for match in pattern.findall(mytext):
...     print(match)
... 
978-1234-567890
>>> mytext="9781234567890"
>>> for match in pattern.findall(mytext):
...     print(match)
... 
9781234567890
>>> 
于 2013-08-14T08:47:37.273 に答える
0

最も簡単な方法は

regex=r'978[-0-9]{10,15}'

それらを受け入れるでしょう。

于 2013-08-14T08:49:15.913 に答える