我会尽力在我的解释^ ^
中说清楚。我输入了一个逐行读取文件的文本(我逐字逐句地尝试过)。一旦我读到我应用一个有效的正则表达式,但输出文件不适合我,我得到这种类型的输出:
<pers> Sarkozy </pers>
<pers> Muscat </pers> , le secrétaire général , devant <pers> Sarkozy </pers>
<pers> Muscat </pers>
我希望:
<pers> Sarkozy </pers>
<pers> Muscat </pers>
<pers> Sarkozy </pers>
<pers> Muscat </pers>
而且我无法理解问题所在......我觉得从它与我的模式匹配的那一刻起,我需要一条整行线而不仅仅是标签...我的正则表达式是不是很好或者它是不是我的方式来阅读我的文件?
我的代码:
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
File file = new File(
monfichier);
String fileContent = readFileAsString(file.getAbsolutePath());
countNE countne = new countNE();
String result = countne.countNE(fileContent);
System.out.println(result);
}
public String countNE(String fileContent) throws java.io.IOException {
int i = 0;
Hashtable<String, Integer> table = new Hashtable();
int nbOcc = 0;
String regPerson = "<pers>.?\\w*.?</pers>";
Pattern pPers = Pattern.compile(regPerson);
Matcher m = pPers.matcher(fileContent);
String result = "";
while (m.find()) {
String person = m.group();
// System.out.println(person + " " + i);
// System.out.println(person);
i++;
result += person + "\n";
}
return result;
}
public static String readFileAsString(String filePath)
throws java.io.IOException {
String chaine = "";
// lecture du fichier texte
try {
InputStream ips = new FileInputStream(filePath);
InputStreamReader ipsr = new InputStreamReader(ips);
BufferedReader br = new BufferedReader(ipsr);
String ligne;
while ((ligne = br.readLine()) != null) {
chaine += ligne + "\n";
}
br.close();
} catch (Exception e) {
System.out.println(e.toString());
}
System.out.println(chaine);
return chaine;
}
}
感谢您的帮助
答案 0 :(得分:0)
问题是
.?
在你的正则表达式中
它匹配任何内容,包括<pers>
和</pers>
因此,为了获得您想要的内容,您可以首先拆分该行,或者通过使用较短的字符间隔进行匹配来排除<pers>
.
(例如[a-zA-Z]
或类似)。< / p>
答案 1 :(得分:0)
正确的方式:
public static String countNE(String fileContent) throws java.io.IOException {
Hashtable<String, Integer> table = new Hashtable();
int nbOcc = 0;
String regPerson = "(<pers>.*?</pers>)";
// String regPerson = "(<.*>.*?</.*>)";
Pattern pPers = Pattern.compile(regPerson);
Matcher m = pPers.matcher(fileContent);
String result = "";
while(m.find())
{
result += m.group(1);
}
return result;
}