我在“费率”列中有多个值
值如下:
20
10
invalidtext
<blank>
NA
n/a
#NA
我尝试使用以下模式
"^0-9" // If input value is not a numeric value (0-9) then replace it with null
但这会将列中的所有文本值替换为null,
我想使用正则表达式仅将具有na,n / a,#na(值可以是Caps或small)值的值替换为null,并保持值“ invalidtext”不变。
对如何设置这种特定的单个模式检查有帮助吗?因为我不想使用多个replace语句。
最佳答案
假设文本是多行文本,则可以使用
s = s.replaceAll("(?mi)^(?!invalidtext$)[^\\d\r\n]*n/?a[^\\d\r\n]*$", "");
请参见regex demo
细节
(?mi)
-MULTILINE和IGNORECASE标志处于打开状态^
-一行的开始(?!invalidtext$)
-该行不能等于invalidtext
[^\d\r\n]*
-0+个字符,数字,CR和LF除外n/?a
-n/a
或na
[^\d\r\n]*
-0+个字符,数字,CR和LF除外$
-行尾。