0

非常に指定された構文で文字列を解析し、ユーザー エラーを修正するシステムをセットアップしています。たとえば、この構文では日付を am/d/yy 形式 (先頭に 0 を付けない) にする必要があるため、次のように置き換える必要があります。

  • 10/01/13 -> 10/1/13
  • 10/10/13 -> 変更なし
  • 10/1/13 -> 変更なし
  • 01/10/13 -> 1/10/13

文字列の一部を見つけてそれらの部分を修正する必要がある、このような多くのルールがあります。RegEx を使用して、修正が必要なものを簡単に特定できます。より簡単な例として、 を見つけたいのですCBUx[2-9]が、次のようなものに置き換える必要がありCBU x [2-9]ます (CBU が前にあり、数字が後に続く場合は x の周りにスペースがあります)。例:

入力テキスト: "何とか CBUx3" 一致: "CBUx3" 置換: "CBU x 3" 出力テキスト: "何とか CBU x 3"

これは可能ですか?スラッシュと数字を見つけるコードを書くことができることを十分に認識していることに注意してください。私は特に「インテリジェンス正規表現の置き換え」でこれをやろうとしています。RegEx と照合できるさまざまな種類の修正がたくさんあるので、それぞれに固有の修正手順を書くことは避けたいと思います。

4

1 に答える 1

0

先行ゼロについては、おそらく次のようなものです。

\b0+([1-9])

$1そして、 (または\1言語によっては、\1最近ではあまり一般的ではありませんが)に置き換えます。

しかし、否定的な後読みを使用すると、もう少し良いことがあります。

(?<![.,])\b0+([1-9])

に変更010,001.002れないように10,1.2

正規表現101のデモ

単語境界 は\b、(またはそれ以上) が数値の先頭にあることを確認し0、負の後読みは、文字列に浮動小数点数があると仮定して、小数点および桁区切り記号の場合に使用されます。ただし、これにより、日付形式のゼロの削除が妨げられることに注意してください11.01.13。ただし、より複雑な正規表現は、そのような日付は常に 2 番目のドットの後に少なくとも 1 つの数字 (日付と月は最大で 2 桁しかないため、2 つの数字の後にある) を持ち、他の数字以外のものに遭遇しないという前提で作成できます。正規表現は次のようになります...

(?<![.,](?![0-9]{2}\.[0-9]))\b0+([1-9])

そして、これはこのようなものになります。


の場合CBUx[2-9]、キャプチャ グループも使用できます。

CBUx([2-9])

そして、次のように置き換えます: CBU x $1(または\1)


先頭のゼロの削除部分については考慮していなかった微調整があるかもしれませんが、それが今考えられることです。

于 2013-10-10T18:22:38.217 に答える