我有一个文本文件,其文字如下所示
Format = {Window_Type =“Tabular”,Tabular = {Num_row_labels = 10 } }
我需要在文本文件中查找Num_row_labels> = 10。我如何使用Python 3.2正则表达式做到这一点? 感谢。
答案 0 :(得分:1)
假设数据格式如上,并且数字中没有前导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+
(第1和第2个正则表达式)或()
(第3个正则表达式)并在第1个引用它捕获组。
答案 1 :(得分:0)
看起来像:
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]+
,正则表达式中的+
符号表示前面的符号/表达式可以是重复一次或多次)。在这些数字之前可以是任何其他数字([0-9]*
,这意味着任何数字,0或更多次)。如果您已有两位数字,则之前可以包含任何其他数字 - 无论如何,该数字将大于或等于10.
答案 2 :(得分:0)
正则表达式为Num_row_labels=[1-9][0-9]{1}.*
现在您可以使用re
python模块(take a look here)来分析您的文本并提取那些
答案 3 :(得分:0)
使用:
match = re.search("Num_row_labels=(\d+)", line)
(\d+)
匹配至少一个十进制数字(0-9)并捕获作为一组匹配的所有数字(组存储在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进行比较。