用于查找字符串的Python正则表达式
我有一个文本文件,其中的文本如下所示 格式={Window\u Type=“Tabular”,Tabular={Num\u row\u labels=10 } } 我需要在文本文件中查找Num_row_标签>=10。如何使用Python 3.2正则表达式实现这一点?用于查找字符串的Python正则表达式,python,python-3.x,Python,Python 3.x,我有一个文本文件,其中的文本如下所示 格式={Window\u Type=“Tabular”,Tabular={Num\u row\u labels=10 } } 我需要在文本文件中查找Num_row_标签>=10。如何使用Python 3.2正则表达式实现这一点? 谢谢。假设数据的格式如上所述,并且数字中没有前导0: Num_row_labels=\d{2,} 一个更自由的正则表达式,允许任意空格,但仍然假设没有前导0: Num_row_labels\s*=\s*\d{2,} Num_ro
谢谢。假设数据的格式如上所述,并且数字中没有前导0:
Num_row_labels=\d{2,}
一个更自由的正则表达式,允许任意空格,但仍然假设没有前导0:
Num_row_labels\s*=\s*\d{2,}
Num_row_labels\s*=\s*0*[1-9]\d+
更自由的正则表达式,允许任意空格,并允许前导0:
Num_row_labels\s*=\s*\d{2,}
Num_row_labels\s*=\s*0*[1-9]\d+
如果需要捕获数字,只需将
\d{2,}
(在第1和第2个正则表达式中)或[1-9]\d+
(在第3个正则表达式中)用括号括起来()
,并在第1个捕获组中引用它。假设数据的格式如上所述,并且数字中没有前导的0:
Num_row_labels=\d{2,}
一个更自由的正则表达式,允许任意空格,但仍然假设没有前导0:
Num_row_labels\s*=\s*\d{2,}
Num_row_labels\s*=\s*0*[1-9]\d+
更自由的正则表达式,允许任意空格,并允许前导0:
Num_row_labels\s*=\s*\d{2,}
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之间的一位数字(
,正则表达式中的符号类[1-9]
,表示此处可以是括号中指定范围内的任何符号)李>[]
- 并且在0到9之间至少有一个数字(但可以是更多的数字)(
,正则表达式中的[0-9]+
符号表示前面的符号/表达式可以重复1次或多次)+
[0-9]*
,表示任何数字,0次或更多次)。当您已经有两个数字时,您可以在之前有任何其他数字-该数字将大于或等于10。re看起来像:
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。正则表达式是Num\u row\u labels=[1-9][0-9]{1}.
现在,您可以使用
re
python模块(来分析文本并提取那些正则表达式是Num\u row\u labels=[1-9][0-9]{1}.
现在,您可以使用re
python模块(要分析文本并提取文本,请使用:
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。组(1)
返回与\d+
匹配的字符串),然后调用int()
,将字符串转换为整数。然后将int()
返回的整数与10进行比较。使用:
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进行比较。是否需要查找此精确字符串,或是否存在任何差异?是否需要查找此精确字符串,或是否存在任何差异?在“自由情况”中它将不正确地工作,例如,Num_row_labels=02
@IgorChubin:已修复并已测试。感谢NHAHDH!您的解决方案也运行良好。我非常感谢您花费所有时间和精力测试所有可能的案例,以获得最佳匹配。:)您在“自由案例”中摇滚它将不正确地工作,例如,Num_row_labels=02
@IgorChubin:已修复并已测试。感谢NHAHDH!您的解决方案也很有效。我非常感谢您花费所有时间和精力测试所有可能的情况,以获得最佳匹配。:)您棒极了!我会将{1}
更改为{1,}
以允许大于99的数字,并在数字周围添加大括号以捕捉它们。@ManuelFaux:the“1”t