
Question:
I have this pattern .*?[a-z]([a-z])([a-z])([a-z]).*?(\s+)(\d+)
from some online generator but it's not working.
I need pattern which allow:
"minimum 3 char length string, next single space, and next minimum 1 char integer" [abc 1] or the same but in different order "minimum 1 char integer, next single space, and next minimum 3 char length string" [3 gtf].
Thanks.
Answer1:Try this one:
\d+\s\w{3,}|\w{3,}\s\d+
It either matches:
<ol><li>One or more digits (\d+
), followed by a single whitespace (\s
), followed by three or more word characters (\w{3,}
) (this is [a-zA-Z0-9], you can replace this part with [a-zA-Z] if you'd like).</li>
<li>Three or more word characters (this is [a-zA-Z0-9], you can replace this part with [a-zA-Z] if you'd like), followed by a single whitespace, followed by one or more digits.</li>
</ol><a href="https://regex101.com/r/tG5nV8/3" rel="nofollow">Regex101</a>
Answer2:The following expression should do what you describe:
[a-z]{3,}\s\d+|\d+\s[a-z]{3,}
Some notes:
<ol><li>The {3,}
construct allows you to specify repetitions within a given range. In general, it's {min,max}
, but you can leave out either min or (as here) max to have an open-ended range. You can also specify an exact number of repeats by specifying a single number, e.g. {99}
.
The expression is essentially two complete expressions switched with alternation. Regular expressions don't allow you to say "exactly these things, in any order".
</li> <li>I've used [a-z]
to match the characters in the non-numeric part, as this is what you did in your original example.