字符串操作 KNIME 中的正则表达式替换
regexReplace in String Manipulation KNIME
我正在尝试使用 KNIME (v3.2.1) 删除以非数字字符开头的所有单元格的内容。我有不同的想法,但没有任何效果。
1)字符串操作节点:regexReplace(§column§,"^[^0-9].*","")
单元格包含多行,但是这种方法只删除了第一行。
2) 字符串操作节点:regexMatcher($casrn_new$,"^[^0-9].*")
后跟规则引擎节点以删除所有 "TRUE" 的列。
regexMatcher 给了我 "False",即使对于应该是 "True" 的列也是如此。
3) 字符串替换节点:我将表达式 ^[^0-9].*
插入模式列并选择 "Replace whole String" 但正则表达式无法被该节点识别,因此没有任何内容被替换。
有没有人对这些方法中的任何一个有解决方案或者知道另一个可以完成这项工作的节点?非常感谢您的帮助!
您应该使用以下表达式:
"(?s)^\D.*$"
所以点甚至会匹配新行。 (基于此:https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#DOTALL)
如果您只需要更改不以数字开头的单元格的内容,我认为您不需要过滤任何列或行。 (顺便说一句,如果你想删除行,有基于规则的行 Filter/Splitter 节点也支持带有 MATCHES 谓词的正则表达式。)
我会选择你的第一个解决方案,因为它已经有效,你只需要扩展你的正则表达式以包含换行符。我会尝试这样的事情:
regexReplace($column$,"^[^0-9].(.|\n)*","")
这应该匹配任何以非数字字符开头,后跟出现任意次数的任意字符或换行符的文本。根据行尾,您可能需要 (.|\n|\r)
而不是 (.|\n)
.
我正在尝试使用 KNIME (v3.2.1) 删除以非数字字符开头的所有单元格的内容。我有不同的想法,但没有任何效果。
1)字符串操作节点:regexReplace(§column§,"^[^0-9].*","")
单元格包含多行,但是这种方法只删除了第一行。
2) 字符串操作节点:regexMatcher($casrn_new$,"^[^0-9].*")
后跟规则引擎节点以删除所有 "TRUE" 的列。
regexMatcher 给了我 "False",即使对于应该是 "True" 的列也是如此。
3) 字符串替换节点:我将表达式 ^[^0-9].*
插入模式列并选择 "Replace whole String" 但正则表达式无法被该节点识别,因此没有任何内容被替换。
有没有人对这些方法中的任何一个有解决方案或者知道另一个可以完成这项工作的节点?非常感谢您的帮助!
您应该使用以下表达式:
"(?s)^\D.*$"
所以点甚至会匹配新行。 (基于此:https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#DOTALL)
如果您只需要更改不以数字开头的单元格的内容,我认为您不需要过滤任何列或行。 (顺便说一句,如果你想删除行,有基于规则的行 Filter/Splitter 节点也支持带有 MATCHES 谓词的正则表达式。)
我会选择你的第一个解决方案,因为它已经有效,你只需要扩展你的正则表达式以包含换行符。我会尝试这样的事情:
regexReplace($column$,"^[^0-9].(.|\n)*","")
这应该匹配任何以非数字字符开头,后跟出现任意次数的任意字符或换行符的文本。根据行尾,您可能需要 (.|\n|\r)
而不是 (.|\n)
.