I have a string like
s = 'ahlkhsa-anchorawO&B6o77ooiynlhwlkfnbla,)9;}[test:""ajanchorkh,2Yio98vacpoi [p{7}]test:"2"*iuyanchorap07A(p)a test:""*^g8p9JiguanchorLI;ntest:"9.3"'
i’d like to see if there exists a substring test:"some_number_here" that’s at most 5 characters following anchor
So in this case there is, test:"9.3" is following substring anchor after 5 other character.
There is also test:"2" but it’s too far away from the anchor before it, so I don’t want to count it.
(Bonus points if i could pull out the number inside test:"")
>Solution :
You may try
anchor.{,5}test:"([\d.]+)"
anchor // literally "anchor"
.{,5} // any character, repeats up to 5 times
test:"([\d.]+)" // test:"digits and dots", the digits and dots are captured in group 1
The number is captured in group 1, see the test cases
See more about regex quantifiers
- Use it in Python:
import re
s = 'ahlkhsa-anchorawO&B6o77ooiynlhwlkfnbla,)9;}[test:""ajanchorkh,2Yio98vacpoi [p{7}]test:"2"*iuyanchorap07A(p)a test:""*^g8p9JiguanchorLI;ntest:"9.3"'
res = re.findall(r'anchor.{,5}test:"([\d.]+)"', s)
print(res) # ['9.3']
- Note
The number matching is loose,
test:"."also counts. If you want a more restricted number validation, you could tryanchor.{,5}test:"(?!\.?")(\d*(?:\.\d*)?)"