除了“M”,“F”,“M / F”之外的所有内容的正则表达式

时间:2012-03-30 20:54:11

标签: regex

如果整个String不是“M”,“F”或“M / F”,我需要在Java中使用正则表达式将字符串替换为“UNKNOWN”。换句话说:

  • 字符串“M”保持“M”
  • 字符串“F”保持“F”
  • 字符串“M / F”保持“M / F”
  • 其他任何事情都变成了“未知”

一个奇怪的情况是“M /”或“F /”应该变为“未知”。请帮忙,我在这里死了。

我实际上是通过xml映射文件将正则表达式传递给框架,所以我没有对输出形成方式的编程控制。我只能传递正则表达式,以及它被替换为什么。

3 个答案:

答案 0 :(得分:3)

你可以使用这样的负向前瞻:

Pattern.compile("^(?!^(?:M|F|M/F)$).*$");

使用String#replaceAll你可以这样做:

String replaced = str.replaceAll("^(?!^(?:M|F|M/F)$).*$", "UNKNOWN");

答案 1 :(得分:0)

您可以测试字符串是否与^(M|F|M/F)$匹配,如果不匹配则替换它。在伪代码中(因为我不记得如何在Java中使用正则表达式):

s = "M"
if not match(s, '^(M|F|M/F)$')
    s = "UNKNOWN"

答案 2 :(得分:0)

if (!Pattern.matches("^M$|^F$|^M/F$", string)) {
    string = "UNKNOWN";
}

哦,这和劳伦斯的答案是一样的......我会选择单个案例,但是......我知道这不是你想要的......抱歉:)