# Regex, um Sätze zu erkennen



## bin4ry (2. Nov 2010)

Hi,

ich möchte mittels der RegEx-Klasse einen Text so parsen, dass die einzelnen Sätze erkannt werden. Ich will es nicht komplex machen und nur auf Satzendezeichen '.', '?' und '!' matchen. Ein RegEx dazu wäre

\\w*[.?!](?=\\s)


Wenn ich das nun aber implementiere, matched er nie. Was mache ich falsch?


```
Pattern pat = Pattern.compile("\\w*[.?!](?=\\s)");
		//Pattern pat = Pattern.compile("^([0-9a-zA-Z]+([_.-]?[0-9a-zA-Z]+)*@[0-9a-zA-Z]+[0-9,a-z,A-Z,.,-]*(.){1}[a-zA-Z]{2,4})+$");
			
		Matcher patmatch = pat.matcher(fileContent);
		if(patmatch.matches())
		{
			System.out.println("it matches");
		}else{
			System.out.println("No matches");
		}
	}
```

Der Inhalt von fileContent ist:

"Dies ist ein Test. Dies ist ein weiterer Test! Dies ist noch einer."


Danke


----------



## Wildcard (2. Nov 2010)

Die matches Methode liefert nur true wenn der gesamte Eingabestring matched. Schau dir mal die anderen Methoden wie zB matcher.find an.


----------



## EinUser2010 (3. Nov 2010)

Probiers mal mit:
(\w*[.?!])*

Außerdem gibt es dafür ein schönes Tool, welches es erlaubt, regex-Ausdrücke direkt zu testen:

The Regex Coach - interactive regular expressions


----------



## palador (4. Nov 2010)

Ich weis ja nicht, wie gut deine Satzerkennung sein soll. Beachte aber, das gerade der Punkt ('.') oft für andere Sachen als das Satzende verwendet wird, wie z.B. nach Abkürzungen oder nach Ordinalzahlen.


----------

