import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(?<=\\$)(\\d(?:,?\\d)*(?:\\.\\d\\d)?)(?:\\s*-\\s*\\$?(\\d(?:,?\\d)*(?:\\.\\d\\d)?))?\\s+per\\s+(?:year|month|day|hour)";
final String string = "ex_1 <- \"starting salary: $18 per hour\", \"retention bonus $500\", \"signing bonus $150\", \"our nannies/babysitters choose the days they can work 8am-6pm and are in a “standby” status on their days on\"\n"
+ "ex_2 <- pay: $65,000.00 - $95,623.00 per year\n"
+ "ex_3 <- \"tuition assistance (100% coverage for select degrees or up to $5,250/year)\", \"pay: $16.25 - $16.50 per hour\"\n"
+ "ex_4 <- salary: $22.00 - 30.00 per hour\n"
+ "ex_5 <- $50,000.00 per year \n"
+ "ex_6 <- $15.00 per hour \n"
+ "ex_7 <- character(0)\n"
+ "ex_8 <- \"salary: $22.00 - $30.00 per hour\", \"pay: $47,257.00 - $49,838.00 per year\")\n\n"
+ "What I would like to extract:\n\n"
+ "ex_1 <- 18 per hour\n"
+ "ex_2 <- 65,000.00 - 95,623.00 per year\n"
+ "ex_3 <- 16.25 - 16.50 per hour\n"
+ "ex_4 <- 22.00 - 30.00 per hour\n"
+ "ex_5 <- 50,000.00 per year\n"
+ "ex_6 <- 15 per hour\n"
+ "ex_7 <- \"\"\n"
+ "ex_8 <- 22.00 - 30.00 per hour 47,257.00 - 49,838.00 per year \n";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Java, please visit: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html