使用正则表达式解析单位的值范围

时间:2016-02-02 16:14:14

标签: python regex python-3.x

我想解析以下字符串:

-32000 ... 0 [foo1] some string not intresting

第一个数字是我的最小值,第二个数字是我的最大值,其中' []'之间的字符串。是我的单位。

我尝试了以下代码:

nums = re.compile(r'.*(?P<minValue>([+-]?\d+(?:\.\d+)?)) \.+ (?P<maxValue>([+-]?\d+(?:\.\d+)?)).*(\[(?P<units>\w+\])?)')
 minMaxValues = nums.match(inputString)
 print(minMaxValues.group('minValue'), minMaxValues.group('maxValue'), minMaxValues.group('units'))

我得到了结果

 0 0 None

任何修复我的正则表达式的帮助都是欢迎的。

说明

  • 数字可以是小数,负数或正数
  • 三点&#39; ...&#39;最小值和最大值之间仅在示例中。这通常是三点但必须是。
  • 这些单位可以包含像“没有单位”这样的字符串。或者&#39; 1 / min&#39;而不只是字符串。

2 个答案:

答案 0 :(得分:2)

您可以使用以下正则表达式/ Python代码(已在评论中提及):

import re
string = "-32000 ... 0 [foo1] some string not intresting"
match = re.match(r'(?P<Pmin>-?\d+)\D+(?P<Pmax>-?\d+).*?\[(?P<Punits>[^]]+)\]', string)
# captures a dash which may or may not be there
# captures digits, minimum 1 time into group 1
# looks for anything that is not a digit (\D+)
# captures digits, minimum 1 time into group 2
# look for square brackets - the unit at the end

print match.group('Pmin')
# output: -32000

在线观看demo on regex101.com

答案 1 :(得分:1)

如果您的文字总是采用这种通用格式,为什么还要使用正则表达式?

text = '-32000 ... 0 [foo1] some string not intresting'

tokens = text.split(maxsplit=3)

my_min = int(tokens[0])
my_max = int(tokens[2])
index = tokens[3].find(']')
units = tokens[3][1:index]

print('Min: {} Max: {} Units: {!r}'.format(my_min, my_max, units))