名前を標準化するための正規表現を書こうとしています。
使用事例:
J. J. Abrams -> JJ Abrams
J J Abrams -> JJ Abrams
J.J Abrams -> JJ Abrams
J.J. Abrams -> JJ Abrams
J J Abrams -> JJ Abrams (multiple spaces)
イニシャルは、名前の最後または途中に表示できます。一般に、イニシャルにはスペースまたは「。」を含めることができます。またはその前後の単語の境界。
だから私はこれを思いついた:
p = re.compile(r'((\b|\s+|\.)[a-z](\.|\s+|\b))', re.I)
結果を一致させて印刷しようとすると、間違って見えます。
p.subn(lambda g: g.groups()[0].strip().strip('.'), "J J Abrams")
('JJAbrams', 2)
非初期部分の前(または後)にスペースを保持するにはどうすればよいですか?
編集また、私はそれを明確にすべきでした、名前には2つ以上のイニシャルが含まれる可能性があります。上記は、ランダムなユースケースの1つにすぎません。ありがとう
与えられた場合、交換
(?<=\b[A-Z]\b)[. ]+(?=[A-Z]\b)|\.|(\s)\s+
と
$1
それをする必要があります。
イニシャル間のスペースとドット、任意の場所のドット、または複数のスペースを交互に使用して一致します。後者は最初のスペースをキャプチャします。
これをに置き換えると$1
、最初の2つの交代から一致が削除され、3番目のケース(いくつかのスペース)では、それらが1つ(最初にキャプチャされたもの)に置き換えられます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加