我在“费率”列中有多个值

值如下:

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/ana
[^\d\r\n]*-0+个字符,数字,CR和LF除外
$-行尾。

08-16 04:37