Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Looping through python regex matches

This has to be easier than what I am running into. My problem is turning a string that looks like this:

ABC12DEF3G56HIJ7 

into

12 * ABC 3  * DEF 56 * G 7  * HIJ 

And I can't, for the life of me, design a correct set of loops using REGEX matching. The crux of the issue is that the code has to be completely general because I cannot assume how long the [A-Z] fragments will be, nor how long the [0-9] fragments will be.

Thank you for any assistance!

like image 213
da5id Avatar asked Oct 13 '12 05:10

da5id


2 Answers

Python's re.findall should work for you.

Live demo

import re  s = "ABC12DEF3G56HIJ7" pattern = re.compile(r'([A-Z]+)([0-9]+)')  for (letters, numbers) in re.findall(pattern, s):     print(numbers, '*', letters) 
like image 171
Ray Toal Avatar answered Oct 10 '22 20:10

Ray Toal


It is better to use re.finditer if your dataset is large because that reduces memory consumption (findall() return a list of all results, finditer() finds them one by one).

import re  s = "ABC12DEF3G56HIJ7" pattern = re.compile(r'([A-Z]+)([0-9]+)')  for m in re.finditer(pattern, s):     print m.group(2), '*', m.group(1) 
like image 41
Mithril Avatar answered Oct 10 '22 19:10

Mithril