python regex not woking for multiple words (re)

Viewed 28

Example

import re

data = 'DisplayName                     =   Umarex Steel Storm BB-Gun   ,'
pattern = r'(\w+)\s*=\s*(\w+)'

re.findall(pattern, data, re.MULTILINE)

Output

Wrong result: (DisplayName, Umarex)

Right result: (DisplayName, Umarex Steel Storm BB-Gun)

1 Answers

You can use

(\w+)\s*=\s*([^\s,](?:[^,]*[^\s,])?)

See the regex demo.

Details:

  • (\w+) - Group 1: one or more letters, digits, connector punctuation
  • \s*=\s* - a = char enclosed with zero or more whitespaces
  • ([^\s,](?:[^,]*[^\s,])?) - Group 2: a char other than whitespace and comma, then an optional sequence of any zero or more non-comma chars and then a char other than whitespace and comma.
Related