简体   繁体   中英

Regex after a special character in Java

I am using regex in java to get a specific output from a list of rooms at my University.

A outtake from the list looks like this:

  • (A55:G260) Laboratorium 260
  • (A55:G292) Grupperom 292
  • (A55:G316) Grupperom 316
  • (A55:G366) Grupperom 366
  • (HDS:FLØYEN) Fløyen (appendix)
  • (ODO:PC-STUE) Pulpakammeret (PC-stue)
  • (SALEM:KONF) Konferanserom

I want to get the value that comes between the colon and the parenthesis.

The regex I am using at the moment is:

pattern = Pattern.compile("[:]([A-Za-z0-9ÆØÅæøå-]+)");
matcher = pattern.matcher(room.text());

I've included ÆØÅ, because some of the rooms have Norwegian letters in them.

Unfortunately the regex includes the building code also (eg "A55") in the output... Comes out like this:

A55
A55
A55
:G260
:G292
:G316

Any ideas on how to solve this?

The problem is not your regular expression. You need to reference group( 1 ) for the match result.

while (matcher.find()) {
  System.out.println(matcher.group(1));
}

However, you may consider using a negated character class instead.

pattern = Pattern.compile(":([^)]+)");

You can try a regex like this :

public static void main(String[] args) {
    String s = "(HDS:FLØYEN) Fløyen (appendix)";
    // select everything after ":" upto the first ")" and replace the entire regex with the selcted data
    System.out.println(s.replaceAll(".*?:(.*?)\\).*", "$1"));
    String s1 = "ODO:PC-STUE) Pulpakammeret (PC-stue)";
    System.out.println(s1.replaceAll(".*?:(.*?)\\).*", "$1"));
}

O/P :

FLØYEN
PC-STUE

Can try with String Opreations as follows,

String val = "(HDS:FLØYEN) Fløyen (appendix)";

if(val.contains(":")){

    String valSub = val.split("\\s")[0];
    System.out.println(valSub);

    valSub = valSub.substring(1, valSub.length()-1);

    String valA = valSub.split(":")[0];
    String valB = valSub.split(":")[1];

    System.out.println(valA);
    System.out.println(valB);

}

Output :

(HDS:FLØYEN)
HDS
FLØYEN 

import java.util.regex.Matcher; import java.util.regex.Pattern;

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

  // String to be scanned to find the pattern.
  String line = "(HDS:FLØYEN) Fløyen (appendix)";
  String pattern = ":([^)]+)";

  // Create a Pattern object
  Pattern r = Pattern.compile(pattern);

  // Now create matcher object.
  Matcher m = r.matcher(line);
  while (m.find()) {
    System.out.println(m.group(1));
}

} }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM