【发布时间】:2013-11-30 06:26:50
【问题描述】:
//---------为清晰而编辑--------//
我查看了网络的其余部分,但到目前为止,没有任何答案能满足我的问题。我有一个正则表达式,对于我正在尝试做的事情来说有点太贪婪了。例如,下面的正则表达式:
(?<piece>q|k|b|p|n|r+)(?<color>l|d)(?<x>\\w)(?<y>\\d)
将匹配
rdh8
rda6
rla1 a3
rlb2
但是,我需要我的正则表达式是具体的;我需要它来排除“rla1 a3”。
目前,正则表达式匹配rla1 a3 的“rla1”部分。由于'a3',我需要正则表达式完全忽略'rla1 a3'。
我尝试了诸如\s?$ 之类的解决方案,但这些都没有奏效。有什么想法吗?
*编辑* //------------------------------------------------ ------------------------------//
这里是问题的一些示例代码。
public ArrayList<String> theStringsToBeRead = new ArrayList<String>();
public void addLines() throws IOException
{
String line;
BufferedReader br = new BufferedReader(new FileReader("testFile"));
//put each line into an arraylist
while((line = br.readLine()) != null)
{
theStringsToBeRead.add(line.toLowerCase()); //adds each line to the arraylist
}
//parse each line in arraylist
for(String item : theStringsToBeRead)
{
testing(item); //for each line, run a regex check
}
}
public void testing(String item)
{
String regex = "(?<piece>q|k|b|p|n|r+)(?<color>l|d)(?<x>\\w)(?<y>\\d)";
//String StevesRegex = "^(?<piece>q|k|b|p|n|r+)(?<color>l|d)(?<x>\\w)(?<y>\\d)$"; //doesnt appear to work
Matcher m = Pattern.compile(regex).matcher(item);
while (m.find())
{
System.out.println(m.group("piece")+m.group("color")+m.group("x")+m.group("y"));
}
}
文本文件为:
rdh8
rda6
rla1 a3
rlb2
我得到的输出是:
rdh8
rda6
rla1
rlb2
想要的结果是正则表达式完全忽略所有“rla1 a3”,而不是匹配其中的一部分。所需的输出将是:
rdh8
rda6
rlb2
任何帮助将不胜感激,非常抱歉让任何人对这个问题感到困惑。感谢您的耐心等待。
【问题讨论】:
-
你有点不清楚。您是否只尝试每行匹配一个条目?如果还有更多,那你不想匹配?
-
输入输出应该是什么?目前还不清楚
-
抱歉,请检查编辑。这更清楚。
-
*是文本的一部分,还是您要使其斜体?请删除所有突出显示的元字符并使用代码格式(缩进 4 个空格)来处理需要为文字的内容。 -
"rdh8" 和 "rla1 a3" 是我要匹配的两个单独的字符串。但是,目标是创建一个匹配第一个但排除第二个的正则表达式。