句読点やスペースが間にある場合は、イニシャル(最大2文字)をまとめたいと思います。
ほとんどすべてに取り組むために次のスニペットがありますが、句読点とスペースで区切られたイニシャルをまとめるのに問題があります。たとえば、これは通常の正規表現では機能しますが、postgresqlでは機能しません。
SELECT regexp_replace('R Z ELEMENTARY SCHOOL',
'(\b[A-Za-z]{1,2}\b)\s+\W*(?=[a-zA-Z]{1,2}\b)',
'\1')
結果は「RZELEMENTARYSCHOOL」になるはずです。その他の例は次のとおりです。
A & D ALTERNATIVE EDUCATION
J. & H. KNOWLEDGE DEVELOPMENT
A. - Z. EVOLUTION IN EDUCATION
変換は次のようになります。
AD ALTERNATIVE EDUCATION
JH KNOWLEDGE DEVELOPMENT
AZ EVOLUTION IN EDUCATION
Postgresqlでこれを達成する方法は?
ありがとう
あなたの現在の正規表現に基づいて、私はお勧めできます
SELECT REGEXP_REPLACE(
REGEXP_REPLACE('J. & H. KNOWLEDGE DEVELOPMENT', '\m([[:alpha:]]{1,2})\M\s*\W*(?=[[:alpha:]]{1,2}\M)', '\1'),
'^([[:alpha:]]+)\W+',
'\1 '
)
参照してくださいオンラインデモを得、
regexp_replace
1 JH KNOWLEDGE DEVELOPMENT
これは2段階のソリューションです。最初の正規表現の一致
\m([[:alpha:]]{1,2})\M
-グループ1にキャプチャされた1文字または2文字の単語全体(\m
先頭の\M
単語の境界であり、末尾の単語の境界です)\s*
-ゼロ個以上の空白\W*
-単語以外の文字が0個以上(?=[[:alpha:]]{1,2}\M)
-現在の位置のすぐ右側に1文字または2文字の単語全体を必要とする前向きな先読み。一致はグループ1(\1
)の内容に置き換えられます。
2番目の正規表現は、文字列の先頭にある文字の単語と一致し、その後のすべての非単語文字をスペースに置き換えます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加