我有一个文本文件,其文本如下所示
格式={ Window_Type="Tabular", Tabular={ Num_row_labels=10 } }
我需要在我的文本文件中查找 Num_row_labels >=10。我如何使用 Python 3.2 正则表达式来做到这一点?谢谢。
我有一个文本文件,其文本如下所示
格式={ Window_Type="Tabular", Tabular={ Num_row_labels=10 } }
我需要在我的文本文件中查找 Num_row_labels >=10。我如何使用 Python 3.2 正则表达式来做到这一点?谢谢。
假设数据的格式如上,并且数字中没有前导 0:
Num_row_labels=\d{2,}
允许任意空格的更自由的正则表达式仍然假定没有前导 0:
Num_row_labels\s*=\s*\d{2,}
一个更自由的正则表达式,它允许任意空格,并允许前导 0:
Num_row_labels\s*=\s*0*[1-9]\d+
如果您需要捕获数字,只需用括号括起来\d{2,}
(在第一个和第二个正则表达式中)或[1-9]\d+
(在第三个正则表达式中)()
并在第一个捕获组中引用它。
重新看起来像:
Num_row_labels=[0-9]*[1-9][0-9]+
使用示例:
if re.search('Num_row_labels=[0-9]*[1-9][0-9]+', line):
print line
正则表达式[0-9]*[1-9][0-9]+
意味着在字符串中必须至少
[1-9]
,正则表达式中的符号类[]
表示此处可以是括号中指定范围内的任何符号);[0-9]+
,+
正则表达式中的符号表示位于它之前的符号/表达式可以重复 1 次或多次)。在这些数字之前可以是任何其他数字([0-9]*
,这意味着任何数字,0 次或更多次)。当你已经有两位数时,你可以有任何其他数字——无论如何,这个数字会大于或等于 10。
正则表达式是Num_row_labels=[1-9][0-9]{1}.*
现在你可以使用re
python 模块(看看这里)来分析你的文本并提取那些
采用:
match = re.search("Num_row_labels=(\d+)", line)
(\d+)
匹配至少一个十进制数字 (0-9) 并将所有匹配的数字捕获为一个组(组存储在 and 返回的对象中,re.search
我re.match
在match
这里分配)。要访问该组并与 比较10
,请使用:
if int(match.group(1)) >= 10:
print "Num_row_labels is at least 10"
这将允许您轻松更改阈值的值,这与在正则表达式中执行所有操作的答案不同。此外,我认为这更具可读性,因为很明显您是在将一个值与 10 进行比较,而不是在正则表达式中匹配一个非零数字后跟至少一个其他数字。上面的代码所做的是询问第一个匹配的组(match.group(1)
返回匹配的字符串\d+
),然后通过调用int()
将字符串转换为整数。然后将返回的整数int()
与 10 进行比较。