2016-10-12 57 views
2

KNIME(v3.2.1)を使用していない文字で始まるすべてのセルの内容を削除しようとしています。私はさまざまなアイデアを持っていますが、何もできませregex文字列操作の置換KNIME

1)文字列操作ノードは:regexReplace(§column§,"^[^0-9].*","")

セルが複数行を含んで、しかし最初の行のみが、このアプローチによって除去されます。

2)文字列操作ノード:regexMatcher($casrn_new$,"^[^0-9].*")「TRUE」であるすべての列を削除するルールエンジンノード。

regexMatcherは、「True」でなければならない列に対しても「False」を返します。

3)String Replacer Node:Pattern列に式を挿入し、 "Replace whole String"を選択しましたが、正規表現はそのノードで認識されず、置き換えられることはありません。

誰かがこれらのアプローチのいずれかの解決法を持っているか、またはその仕事をする可能性のある別のノードを知っていますか?助けが大いにありがとう!

答えて

5

これは既に機能しているので、正規表現を改行を含むように拡張する必要があります。

regexReplace($column$,"^[^0-9].(.|\n)*","")

これは、任意の文字や改行の出現続いて任意の数の数ではない文字で始まる任意のテキストを一致させる必要があります:私はこのような何かをしようとするだろう。行末によっては、(.|\n)の代わりに(.|\n|\r)が必要な場合があります。

+0

実際に 'regexReplace($ column $、"^[^ 0-9](。| \ n)* "、" ")'を実行しようとしました。 '(。| \ n | \ r)'は問題の解決策でした!どうもありがとう! – mri

2

あなたは次の式を使用する必要がありますので、ドットも新しい行にマッチします

"(?s)^\D.*$" 

を。 (これに基づいて:https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#DOTALL

数字で始まらないセルの内容のみを変更する必要がある場合は、列や行をフィルタリングする必要はありません。 (行を削除したい場合は、MATCHES述語でも正規表現をサポートするルールベースの行フィルタ/スプリッタノードがあります)。

+0

KNIMEでは式が正しく機能しませんでしたが、 '?m'が存在することを知っておくとよいでしょう。その他の情報もありがとう! – mri

+0

私はあなたが式を編集し、それをString Replacer Nodeで試してみることに気付きました。それはまったく問題ありません! – mri