Regex Frage (+ ersetzen)

Status
Nicht offen für weitere Antworten.

EOB

Top Contributor
hallo, ich moechte aus einem string dieser art:


+ ++ +++++ t1+t2+ + + + + +t3+ +t4++ + + +++++ + ++++ ++ +


einen string dieser art


t1+t2+t3+t4


machen. dabei koennen die + auch vollkommen anders auftreten und t1 etc sind nur fantasienamen, die auch komplett anders heissen konnen und auch leerzeichen enthalten koennen. also es ginge auch:


+ ++++++ + + + +++++ das ist sozusagen t1+++ + + t2+ + + + + +t3+ +t4++ + +


daraus muesste dann


das ist sozusagen t1+t2+t3+t4


werden. ich sitz da schon recht lang dran und komm nicht drauf. jemand ne idee?

danke 🙂
 
entferne einfach alle '+' und füge sie an den Stellen, an denen du sie gerne hättest wieder ein
 
wie soll das genau aussehen? ich habs jetzt so, scheint mir aber recht laenglisch...geht das auch kuerzer?

Code:
term = "+  ++    +++++   t1 und noch was+t2+   + + + +    +t3+      +t4++ + +  +++++ +  ++++ ++                      ";

	term=term.replaceAll("\\+{2,}", "\\+");
	System.out.println("1" + term + "-");
	
	term=term.replaceAll(" {2,}", "\\+");
	System.out.println("2" + term + "-");
	
	term=term.replaceAll("\\+{2,}", "\\+");
	System.out.println("3" + term + "-");
	
	term=term.replaceAll("(\\+ )+", "\\+");
	System.out.println("4" + term + "-");
	
	term=term.replaceAll("\\+{2,}", "\\+");
	System.out.println("5" + term + "-");
	
	term=term.replaceAll("(^ *\\+*)|(^\\+* *)|( *\\+*$)|(\\+* *$)", "");
	System.out.println("finale:" + term + "-");

???:L

gruesse
 
mit regulären Ausdrücken

Code:
String regex = "[ +]*";
term = term.replaceAll(regex,"");
 
das wird so nix, weil was ist mit spacespace+? ich denke, es muss komplexer sein, da alle vorkommen von + und space gefunden werden muessen.

noch weitere ideen?

danke im voraus 🙂
 
das funktioniert!

Code:
public class Tests {

  public static void main(String[] args){
	  String term = "  +  ++    +++++   t1 und noch was+t2+   + + + +    +t3+      +t4++ + +  +++++ +  ++++ ++      " ;
	  String regex="[ +]*";
	  term=term.replaceAll(regex, "");
	  System.out.println(term);
    } 
	 
}
 
Mit

Code:
"[\+\ ]*"

müsste es doch klappen.

Oder falls du statt Leerzeichen auch andere Whitespace-Zeichen hast:

Code:
"[\+\s]*"

Damit findest du ja eine beliebige Folge solcher Zeichen und kannst diese durch + ersetzen.
 
was ist aber, wenn es space++spacespacespace+ etc ist? das findet das nicht. also meins sieht jetzt so aus und es funzt, aber ich weiss eben nicht, ob das nicht zu viel ist?

Code:
term = "+ ++ +++++ das ist termt1! + t2+ + + + + +t3+ +t4++ + + +++++ + ++++ ++ + ";

	term=term.replaceAll("\\+{2,}", "\\+");
	System.out.println("1" + term + "-");
	
	term=term.replaceAll(" {2,}", "\\+");
	System.out.println("2" + term + "-");
	
	term=term.replaceAll("\\+{2,}", "\\+");
	System.out.println("3" + term + "-");
	
	term=term.replaceAll("( ?\\+ ?)+", "\\+");
	System.out.println("4" + term + "-");
	
	term=term.replaceAll("\\+{2,}", "\\+");
	System.out.println("5" + term + "-");
	
	term=term.replaceAll("(^ *\\+*)|(^\\+* *)|( *\\+*$)|(\\+* *$)", "");

???:L :autsch:
 
es sollen ja dazwischen jeweils EIN + stehenbleiben...siehe mein erstes posting. :?: :!:

danke 🙂
 
Ganz unrecht hast du nicht. Statt
Code:
"[\+\s]*"

muss es heißen
Code:
"[\+\s]+"
 
also das hier:

Code:
term=term.replaceAll("[+ ]*", "\\+");

macht ++d+a+s++i+s+t++t+e+r+m+t+1+!++t+2++t+3++t+4++- draus. oder wie ist das jetzt gemeint?

gruesse
 
ok, also so hier:

Code:
term=term.replaceAll("[+\\s]+", "\\+");

siehts ganz gut aus, aber er ersetzt leerzeichen, wo er nicht soll...siehe erstes posting.

--> + ++++++ + + + +++++ das ist sozusagen t1+++ + + t2+ + + + + +t3+ +t4++ + + geht nicht damit

gruesse
 
Mørketid hat gesagt.:
also das hier:

Code:
term=term.replaceAll("[+ ]*", "\\+");

macht ++d+a+s++i+s+t++t+e+r+m+t+1+!++t+2++t+3++t+4++- draus. oder wie ist das jetzt gemeint?

gruesse

Ja, war ein Fehler meinerseits. Du musst natürlich auf mindestens ein Zeichen prüfen. Aber da du ja reine Leerzeichen nicht auch ersetzen willst, nimm das hier:

Code:
term.replaceAll("[\\+\\s]*\\+[\\+\\s]*", "+")

Dann wird nur ersetzt, wenn auf jeden Fall ein + drin ist und davor und dahinter beliebig viele weitere + oder Whitespace-Zeichen.


EDIT: Schreibfrequenz zu hoch. Wir überschneiden uns ständig. ;-)
 
ja, also das geht nicht...mach ich was falsch, oder wie jetzt :shock: :lol: . also probier mal deine loesung mit diesem term:


term = "+ ++ +++++ +das ist termt1! + t2+ + + + + +t3+ +t4++ + + +++++ + ++++ ++ + ";


was kommt raus?

gruesse
 
Ich habe sie probiert:

Code:
   String  term = "+ ++ +++++ das ist termt1! + t2+ + + + + +t3+ +t4++ + + +++++ + ++++ ++ + ";
      System.err.println(term);
      System.err.println(term.replaceAll("[\\+\\s]*\\+[\\+\\s]*", "+"));

Ergebnis:

Code:
+ ++ +++++ das ist termt1! + t2+ + + + + +t3+ +t4++ + + +++++ + ++++ ++ + 
+das ist termt1!+t2+t3+t4+

Noch nicht dein gewünschtes Ergebnis?
 
Dann wirst du wohl doch noch zusätzliche Ausdrücke verwenden müssen, um diese durch "" zu ersetzen. In demselben geht es nicht (und wenn, nur unnötig kompliziert).
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben