Regex expression is not working correctly

Related searches

I am trying to find in a string in which numbers are formatted as "4.97", but if they are smaller than 1, they are in the format .97, .80 etc. I want to find these kind of substrings in the String and replace them so that they would start with a 0.

It's working for the string

String str = "Rate is : .97";

Result : "Rate is : 0.97"

But not for the string: String str = "Rate is : .97 . XXXXXXXXX do you want . to perform another calculation . ";

    String str = "Rate is : .97  . XXXXXXXXX do you want . 87 to perform another calculation . ";
    String pattern = "(.*\\D)(.\\d\\d.*)";
    str = str.replaceAll(pattern, "$10$2");

Why is this happening?

In your second example, the .* after the last \\d will match any character except a newline which will match the rest of the string.

You might do the replacement without a capturing group using a negative lookbehind (?<!\S) to check if what is on the left is not a non whitespace char.


In the replacement use a zero followed by the full match.

Regex demo | Java demo

String str = "Rate is : .97  . XXXXXXXXX do you want . 87 to perform another calculation . ";
String pattern = "(?<!\\S)\\.[0-9]";
System.out.println(str.replaceAll(pattern, "0$0"));


Rate is : 0.97  . XXXXXXXXX do you want . 87 to perform another calculation . 

If there should be a non digit before, you could make use of a positive lookbehind


Regex demo

In Java

String regex = "(?<=\\D)\\.[0-9]";

Regular Expressions :: Eloquent JavaScript, Properly understanding regular expressions will make you a more effective In the following example, the u character is allowed to occur, but the pattern also� The regular expression fails to match the first number because the * quantifier tries to match the previous element as many times as possible in the entire string, and so it finds its match at the end of the string. This is not the desired behavior.

It looks like you need to add some lazy matching to your regex.

? means it will attempt to match as few times as possible, in this case it's to only pick up the first number and not go onto the second.


You can see this regex work here, with a more complete explanation.

I have also added the ^ start of string matcher so to make sure only one match it created and not repeated onto the second.

Correct regex not working in grep, Regular expressions come in many different flavours. What you are showing is a Perl-like regular expression (PCRE, "Perl Compatible Regular� In the Answer 1 box you would type the "best" answer, e.g. "it's blue, white and red". For more details, see First correct answer below. In the Answer 2 box you would type this regular expression: "it's blue, white (,| and) red" (quotes should not be typed, of course).

First of all, your regex pattern seems to be wrong. I think you can just use:


Find a character that is not a digit, followed by a dot and at least one digit.

Second, for replacing, you could use more low-level features, such as:

String str = "Rate is : .97  . XXXXXXXXX do you want . 87 to perform another calculation . ";

final Pattern regex = Pattern.compile("(\\D)(\\.\\d+)");
final Matcher m = regex.matcher(str);
if (m.find()) {
  str = m.replaceFirst( + "0" +;


But of course, this works too:

str = str.replaceAll("(\\D)(\\.\\d+)", "$10$2");

Everything you need to know about Regular Expressions, The above pattern matches foo.csv , but does not match bar.txt or my_csv_file . All of these come up regularly when doing data preparation work. as possible, in the hopes of getting the domain name captured properly. In this tutorial, you will learn about regular expressions (RegEx), and use Python's re module to work with RegEx (with the help of examples). A Re gular Ex pression (RegEx) is a sequence of characters that defines a search pattern.

You can do a positive lookahead so that way you also catch whitespaces between . and the number.


would give you

Then in your code you can do whatever operation on group 1(blue) and group 2(red) as you wish.

Why isn't the Java matches method working? (Java pattern matching , Specifically, a regex pattern like the following one will not work with the matches method, showing both (a) the wrong way and (b) the correct� The solution to this is to write regular expressions that describe each of the possible larger elements, find these as well, decide what type of element each is, and discard the ones that are not comments. There are tools called lexers or tokenizers that can help with this task.

Re: Why is my JSON regex expression not working properly?, Solved: I have a JSON file, which is being indexed by Splunk, the format is like - { testdata : [ { "testid" : 1234, "abc" : the input does match the regular expression; the input does not match the regular expression right now, but it will if more characters will be added to it. Note that these three cases represent exactly the possible states of a QValidator (see the QValidator::State enum).

At the bottom of the page is an explanation of all the regular expression operators as well as the functions that work with regular expressions. Examples Example 1: A researcher has addresses as a string variable and wants to create a new variable that contains just the zip codes.

Since the right side of | succeeded, our regular expression succeeds with the match, which means our number is not prime. As an example of where a match fails, let’s consider the string 11111. The length of the string we’re matching against is 5. Now, 5 is a prime number, so we expect the regex to fail to match anything.