我想解析以下字符串:
-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
任何修复我的正则表达式的帮助都是欢迎的。
说明:
答案 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))