1

我有一个文本文件,其文本如下所示

格式={ Window_Type="Tabular", Tabular={ Num_row_labels=10 } }

我需要在我的文本文件中查找 Num_row_labels >=10。我如何使用 Python 3.2 正则表达式来做到这一点?谢谢。

4

4 回答 4

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+(在第三个正则表达式中)()并在第一个捕获组中引用它。

于 2012-06-26T13:17:56.833 回答
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 的一位数字([1-9],正则表达式中的符号类[]表示此处可以是括号中指定范围内的任何符号);
  • 以及从 0 到 9 的至少一个数字(但可以更多)([0-9]++正则表达式中的符号表示位于它之前的符号/表达式可以重复 1 次或多次)。

在这些数字之前可以是任何其他数字([0-9]*,这意味着任何数字,0 次或更多次)。当你已经有两位数时,你可以有任何其他数字——无论如何,这个数字会大于或等于 10。

于 2012-06-26T13:19:09.910 回答
0

正则表达式是Num_row_labels=[1-9][0-9]{1}.*

现在你可以使用repython 模块(看看这里)来分析你的文本并提取那些

于 2012-06-26T13:19:16.917 回答
0

采用:

match = re.search("Num_row_labels=(\d+)", line)

(\d+)匹配至少一个十进制数字 (0-9) 并将所有匹配的数字捕获为一个组(组存储在 and 返回的对象中,re.searchre.matchmatch这里分配)。要访问该组并与 比较10,请使用:

if int(match.group(1)) >= 10:
    print "Num_row_labels is at least 10"

这将允许您轻松更改阈值的值,这与在正则表达式中执行所有操作的答案不同。此外,我认为这更具可读性,因为很明显您是在将一个值与 10 进行比较,而不是在正则表达式中匹配一个非零数字后跟至少一个其他数字。上面的代码所做的是询问第一个匹配的组(match.group(1)返回匹配的字符串\d+),然后通过调用int()将字符串转换为整数。然后将返回的整数int()与 10 进行比较。

于 2012-06-26T13:54:15.663 回答