我的费率列中有多个值
值如下:
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(值可以是大写或小)的值替换为 null,并保持值“invalidtext”不变。
关于如何设置这样一个特定的单一模式检查有什么帮助吗?因为我不想使用多个替换语句。
最佳答案
假设文本是多行文本,您可以使用
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 之外的字符$
- 行尾。
关于Java - 匹配特定文本的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58306130/