RegEx - Elemente mit bestimmter Anzahl

Hallo zusammen,

ich habe folgende Problemstellung. Gegeben sei folgender String:

asdfasdf;;asdfadsf;asdfasdfasfd;;Asdfasdfasdf;asdfasdfadsf;;Asdfasdgsadgf;

Ich möchte nun alle Semikolons finden, die einzeln vorkommen, also alle Stellen mit “;” aber nicht mit “;;”.

Ich habe nun folgende Beispiele versucht, die leider beide nicht funktionieren


;{1}

(?<!;);(!?;)

Hat jemand eine Idee?

Vielen Dank!

Michael

Kannst es ja mit (^|[^;]+)(;{1})([^;]+|$) versuchen

Hallo XHelp,

danke für Deine Antwort. Mit Deinem Ausdruck bekomme ich nun nochmal andere Ergebnisse:

Match 1

  1. asdfadsf
  2. ;
  3. asdfasdfasfd
    Match 2
  4. Asdfasdfasdf
  5. ;
  6. asdfasdfadsf
    Match 3
  7. Asdfasdgsadgf
  8. ;

Wie kann ich ihm nur sagen, dass ich nur jeweils den zweiten Punkt also das Semikolon haben möchte?

Viele Grüße

Michael

wie kommst du denn an die ‘drei Unterpunkte’ bisher ran, arbeitest du mit group() von Matcher?
und was genau ist dein Ziel beim ‘rankommen’, willst du einen String “;” haben, was bringt dir das?

dein Beispiel mit asdfasdfasfd ist schwer nachzuvollziehen, das zeigt wie es doch besser ist, a, b, c oder so zu verwenden,
und das Beispiel hat noch den Nachteil, dass direkt a;b;c hintereinander nicht vorkommt, also ein Zeichen b in zwei find()-Vorgängen Verwendung finden muss, dass wird nämlich dann nicht gut klappen bisher,

hier ein anderer Ansatz:

public class Test {
	public static void main(String[] args) {

		String st = "a;b;c;;d;;e;f;;g;";
		Pattern p = Pattern.compile("(?<!;);(?!;)");
		Matcher m = p.matcher(st);
		while (m.find()) {
			System.out.println(m.group() + " " + m.start());
		}
	}
}

liefert


; 1
; 3
; 11
; 16

also “;” wenn dir das nützt und die Position im String

http://www.regular-expressions.info/lookaround.html

Hi,

ah ok, Kontext

Hintergrund ist, ich will den String splitten, aber nur an den Stellen, an denen ein Semikolon vorkommt. D.h:


String[] parts = myExampleString.split("...");

Viele Grüße

Michael

Als Ergebnis von dem Split möchte ich im Grunde:

parts[0] = “asdfasdf;;asdfadsf”
parts[1] = “asdfasdfasfd;;Asdfasdfasdf”
parts[2] = “asdfasdfadsf;;Asdfasdgsadgf”

Viele Grüße

Michael

na dann schaue nach ob du mit

zufrieden bist

Hi,

das hatte ich auf diversen Online RegEx Testern probiert und da hat er nichts gefunden. Daher dachte ich, das wäre nicht korrekt. Dann teste ich es mal in Java direkt.

Viele Grüße

Michael