On 4/28/21 6:28 PM, Joshua Judson Rosen wrote:
> On 4/28/21 5:57 PM, Bruce Labitt wrote:
>> If someone could suggest how to do this, I'd appreciate it.  I've
>> scraped a table of fine thread metric screw parameters from a website.
>> I'm having some trouble with regex (re) separating the numbers.  Have
>> everything working save for this last bit.
>> Here is a sample string:
>> r1[1] = ' 17.98017.87417.65517.59917.43917.291'
>> I'm trying to separate the numbers.  It should read like this:
>> 17.980, 17.874, 17.655, 17.599, 17.439, 17.291
>> There's more than 200 lines of this, so it would be great to automate
>> it!  Each number has 3 digits of precision, so I want to add a comma and
>> a space after the third digit.
>> re.search('(\.)\d{3,3}', r1[1]) returns
>> <re.Match object; span=(3, 7), match='.980'> so it found the first instance.
>> But, re.sub('(\.)\d{3,3}', '(\.)\d{3,3}, ', r1[1]) yields a KeyError:
>> '\\d' (Python3.8).  Get bad escape \d at position 4.
> The second argument [the replacement string] to re.sub(pattern, repl, string) 
> is not supposed to
> just be a variation of the pattern-matching string that you passed as the 
> first argument.
> I think the best illustration that I can give here is to just fix this up for 
> you:
>       re.sub(r'(\.)(\d{3,3})', r'\1\2, ', r1[1])
Thanks for the embarrassingly concise answer.  It is greatly 
appreciated.  Can you explain the syntax of the 2nd argument?  I haven't 
seen that before.  Where can I find further examples?

What astounds me is re.search allowed my 1st argument, but re.sub barfed 
all over the same 1st argument.

gnhlug-discuss mailing list

Reply via email to