正则表达式 - 解析字符串

时间:2012-08-05 22:42:06

标签: java regex

假设我有一个包含以下行的文件:

Hayden
y

假设我想操纵只包含“y”而不是Hayden的那条线,我该怎么做?

所以我在文件中读到并逐行解析。我想说如果该行包含“y”之前或之后的字母,那么它不是我正在寻找的行。

我以为我可以做到以下几点:

String value = "y"; 
if(strLine.matches("[a-zA-Z]" + value + "[a-zA-Z]"))
{
      don't manipulate line here
}
else
{
   manipulate string here
}

但是,这会得到“海登”以及“y”

有什么想法吗?

修改

抱歉,我应该更清楚,如果我不介意前面是否有空格或符号怎么办?还是落后?它特别是我需要注意的字母。例如,我不能拥有,但我可以拥有y = ......再次抱歉

5 个答案:

答案 0 :(得分:4)

您可以使用否定lookarounds

if (strLine.matches("^.*(?<![a-zA-Z])y(?![a-zA-Z]).*$")) { 
    // manipulate string here
}

锚是可选的,但为了清楚起见,包括在内。

答案 1 :(得分:3)

您可以使用:

strLine.matches("^y$")

要忽略符号,即非字母数字字符,请使用:

strLine.matches("^\\W*y\\W*$")

答案 2 :(得分:1)

也许这就是你要找的东西

String[] lines={"Hayden","y"," y*","y=","y+"," +y..."};
for (String s:lines)
    System.out.println(s+"->"+s.matches("\\W*y\\W*"));

输出:

Hayden->false
y->true
 y*->true
y=->true
y+->true
 +y...->true

答案 3 :(得分:0)

如果你打算使用正则表达式,你需要更具体一点:

  • y匹配该行中任意位置的y
  • ^y$匹配字符串结尾(美元符号)之前和字符串开头(插入符号)之后的y。这使您可以将相等的行与y匹配。

答案 4 :(得分:0)

扩展平等方法:只需删除您不介意的所有字符,然后检查"y"的相等性:

if (strLine.replaceAll("[^a-zA-Z]", "").equals("y")) {
    ...
}