I would like to be able to find the first occurrence of m² and then numbers in front of it, could be integers or decimal numbers. E.g.
"some text" 38 m² "some text" ,
"some text" 48,8 m² "some text",
"some text" 48 m² "some text", etc..
What I have so far is:
\d\d,\d\s*(\m\u00B2)|\d\d\s*(\m\u00B2)
This right now finds all occurrences, although I guess it could be fixed with findFirst()
. Any ideas how to improve the Regex part?
Count occurrences of a given character using Regex in Java. Given a string and a character, the task is to make a function which counts the occurrence of the given character in the string using ReGex. Examples: Input: str = "geeksforgeeks", c = 'e' Output: 4 'e' appears four times in str.
Enter String to Find First Char Occur = java Enter the Character to Find = a The First Character Occurrence of a at 1 position In Java Programming, there is a string function called indexOf. This indexOf function returns the index position of the first occurrence of a character in a string.
It is widely used to define the constraint on strings such as password and email validation. After learning Java regex tutorial, you will be able to test your regular expressions by the Java Regex Tester Tool.
Java Regex. The Java Regex or Regular Expression is an API to define a pattern for searching or manipulating strings. It is widely used to define the constraint on strings such as password and email validation. After learning Java regex tutorial, you will be able to test your regular expressions by the Java Regex Tester Tool.
To get the first match, you just need to use Matcher#find()
inside an if
block:
String rx = "\\d+(?:,\\d+)?\\s*m\\u00B2";
Pattern p = Pattern.compile(rx);
Matcher matcher = p.matcher("E.g. : 4668,68 m² some text, some text 48 m² etc");
if (matcher.find()){
System.out.println(matcher.group());
}
See IDEONE demo
Note that you can get rid of the alternation group using an optional non-capturing group (?:..)?
Pattern breakdown:
\d+
- 1+ digits(?:,\d+)?
- 0+ sequences of a comma followed with 1+ digits\s*
- 0+ whitespace symbolsm\u00B2
- m2.This is what I came up with you help :) (work in progress, later it should return BigDecimal value), for now it seems to work:
public static String findArea(String description) {
String tempString = "";
Pattern p = Pattern.compile("\\d+(?:,\\d+)?\\s*m\\u00B2");
Matcher m = p.matcher(description);
if(m.find()) {
tempString = m.group();
}
//remove the m and /u00B2 to parse it to BigDecimal later
tempString = tempString.replaceAll("[^0-9|,]","");
System.out.println(tempString);
return tempString;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With