Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于查找字符串的Python正则表达式_Python_Python 3.x - Fatal编程技术网

用于查找字符串的Python正则表达式

用于查找字符串的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

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

格式={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_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