3

バックグラウンド

手作りの成分リストは次のようになります。

180-200g/6-7oz flour
3-5g sugar
6g to 7g sugar
2 1/2 tbsp flour
3/4 cup flour

問題

項目は次のように正規化する必要があります。

180 to 200 g / 6 to 7 oz flour
3 to 5 g sugar
6 g to 7 g sugar
2 1/2 tbsp flour
3/4 cup flour

コード

これが私がこれまでに持っているものです:

text = text.replaceAll( "([0-9])-([0-9])", "$1 to $2" );
text = text.replaceAll( "([^0-9])/([0-9])", "$1 / $2" );
return text.replaceAll( "([0-9])([^0-9 /])", "$1 $2" );

質問

データを分割する最も効率的な正規表現は何ですか?

ありがとうございました!

4

3 に答える 3

2

を使用\bして、単語の境界にスペースを挿入できます。

return text.replaceAll( "([0-9])-([0-9])",  "$1 to $2" )
           .replaceAll( "\\b", " ")
           .replaceAll( " {2,}", " ")
           .trim();
于 2012-06-06T07:01:06.900 に答える
1

組み合わせることができます

text = text.replaceAll( "([^0-9])/([0-9])", "$1 / $2" );
return text.replaceAll( "([0-9])([^0-9 /])", "$1 $2" );

次のようなものを使用して:

text.replaceAll("\\D(?=/\\d)|(?<=\\D)/(?=\\d)|\\d(?=[^0-9 /])", "$0 ");

それが速いかどうかはわかりません。

この方法が頻繁に使用される場合は、すべてのパターンを事前にコンパイルし、代わりにここでコンパイルされたパターンを使用することで、おそらくより多くを得ることができます。

于 2012-06-06T13:35:37.313 に答える