0

パターンジェネレーターのソリューションを整理するのに助けが必要です。

私は次のような異なるパターンの交換フォーマットを使用するアプリケーションを持っています

00350-ABA-0NZ0:AXYA-2012年11月11日など、

'-'、'。'、 ":"および'/'で区切られた数値および英数字データがあります。ここで、これをnnnnn-ccc-nccn:cccc-nn / nn / nnnnのような一般的な形式に変換します。ここで、nは数字、cは文字です。

ヘルプ/提案/アイデア。。。CSKに感謝します。

4

1 に答える 1

0

単一の正規表現で条件付き置換を実行することはできません。あなたは2つのステップでそれをする必要があります(これはPythonの例です):

>>> s = "00350-ABA-0NZ0:AXYA-11/11/2012"
>>> s = re.sub(r"[A-Za-z]", "c", s)
>>> s
'00350-ccc-0cc0:cccc-11/11/2012'
>>> s = re.sub(r"\d", "n", s)
>>> s
'nnnnn-ccc-nccn:cccc-nn/nn/nnnn'

そして、あなたはそれをこのように行う必要があります-私はあなたのコメントであなたの解決策を見ただけです、そしてあなたがそれをもう一度見ると、あなたはそれがうまくいかないのを見るでしょう。ヒント:'ccccc-ccc-cccc:cccc-cc/cc/cccc'結果として得られます...

別の解決策は、一致を調べ、それに応じて置換文字列を選択するコールバック関数を使用することです。しかし、それはもはや純粋な正規表現ではありません。

>>> def replace(m):
...     return "n" if m.group(0).isdigit() else "c"
...
>>> s = re.sub(r"[A-Za-z0-9]", replace, s)
>>> s
'nnnnn-ccc-nccn:cccc-nn/nn/nnnn'
于 2012-10-06T20:39:42.577 に答える