私は文字列を持っています:
A12B34C10G34LongerLongerEven LongerA57
正規表現を使用して上記を次の形式に分離する方法はありますか。
A12,B34,C10,G34,Longer,Longer,Even Longer,A57
したがって、カンマで区切ります。どんな助けにも感謝します。ありがとう。
これにより、必要なものが得られます。
<?php
$str = "A12B34C10G34LongerLongerEven LongerA57";
echo preg_replace('/([^\s])([A-Z])/', '\1,\2', $str), "\n";
// OUTPUT: A12,B34,C10,G34,Longer,Longer,Even Longer,A57
preg_replace ('/\B([A-Z])/',',$1',$string);
単語境界にない大文字の前にコンマを挿入します。
私の仮定では、入力データは大文字の後に数字と大文字の単語が続き、スペースで区切られている場合と区切られていない場合があります。
import re
ss = ' \tA12B34C10#G34LongerVery LongerEven LongerA57 \n'
print '%r\n%r\n\n%r' %\
(
#good 1
re.sub('(?<=\S)(?=[A-Z])', ',', ss),
#good 2
','.join(
re.findall('(\s*[A-Z].+?\s*)(?=(?<=\S)[A-Z]|\s*\Z)',ss)
),
#bad (written at first)
','.join(
re.findall('(?<!\s)([A-Z].+?)(?<!\s)(?![^A-Z])',ss)
)
)
結果
' \tA12,B34,C10#,G34,Longer,Very Longer,Even Longer,A57 \n'
' \tA12,B34,C10#,G34,Longer,Very Longer,Even Longer,A57 \n'
'B34,C10#,G34,Longer,Very Longer,Even Longer'
.
最初の解決策は、アイデア (コンマを挿入する) にできるだけ近いものです。各コンマを文字間
(?<=\S)
に挿入する必要があるため(DJV からの修正) 、文字列の先頭と一致し、最初の位置にコンマが追加されるため、このソリューションでは必須です。
(?<!\s)
.
最初の執筆で、私は2番目の解決策を次のように書いていました
# bad
','.join(re.findall( '(?<!\s)([A-Z].+?)(?<!\s)(?![^A-Z])', ss) )
また
# bad
``','.join(re.findall( '(?<!\s)([A-Z].+?)(?<!\s)(?=[A-Z]|\Z)', ss) )``
どこで、
(?![^A-Z])
または(?=[A-Z]|\Z)
一致する部分の可能な終了として、文字列の終了を考慮する必要がありました。
その後
、空白が文字列の先頭または末尾にある場合、問題があることに気付きました。上記のコードは、どれを示しています。
これらの問題を回避するための解決策は、良い解決策の 2 です。しかし、これは複雑で難しいので、良い解決策の 1 が私の好みの解決策であることは明らかです。
','
スペースが前に付いていない各大文字の前にを追加したい場合は、ここに簡単なPython regex
+sub
の方法があります。
string = 'A12B34C10G34LongerLongerEven LongerA57'
re.sub(r'(?<=[^ ])([A-Z])', lambda x: ',' + x.group(0), string)
出力:
'A12,B34,C10,G34,Longer,Longer,Even Longer,A57'
はregex
スペース以外をチェックするために後読みを行い、一致は上位文字です。次に、この上位文字の前に。が付き','
ます。
これを試して :
$in = 'A12B34C10G34LongerLongerEven LongerA57';
$output = trim(preg_replace('/([^\s])([A-Z])/', "$1,$2", $in),",");
echo $output;
出力:A12,B34,C10,G34,Longer,Longer,Even Longer,A57
どこにもコンマが入らないと仮定して、これを使用できます$in
explode(",", preg_replace('/([^\s])([A-Z]+)/', "$1,$2", $in);
Python はよくわかりませんが、基本正規表現は同じです。