这就是所谓的常用表达 https://docs.python.org/3/library/re.html:
import re
string = 'value is between 5 and 10'
m = re.match(r'value is between (.*) and (.*)', string)
print(m.group(1), m.group(2))
Output:
5 10
更新1。可以为组指定名称:
m = re.match(r'value is between (?P<min>.*) and (?P<max>.*)', string)
print(m.group('min'), m.group('max'))
但这个功能并不经常使用,因为通常在一个更重要的方面存在足够多的问题:如何准确捕获你想要的内容(在这种特殊情况下这不是什么大问题,但即使在这里:如果字符串是value is between 1 and 2 and 3
-- 是否应该接受该字符串以及什么是min
and max
?).
更新2。有时,将正则表达式和“常规”代码结合起来比创建精确的正则表达式更容易,如下所示:
m = re.match(r'value is between (?P<min>.*) and (?P<max>.*)', string)
try:
value_min = float(m.group('min'))
value_max = float(m.group('max'))
except (AttributeError, ValueError): # no match or failed conversion
value_min = None
value_max = None
当您的文本包含许多要处理的块(例如不同类型的引号中的短语)时,这种组合方法尤其值得记住:在棘手的情况下,定义单个正则表达式来处理块的分隔符和内容比定义多个正则表达式更难步骤如text.split()
,可选的块合并,以及每个块的独立处理(使用正则表达式和其他方式)。