Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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_Regex_Python 2.7 - Fatal编程技术网

使用python的正则表达式不起作用

使用python的正则表达式不起作用,python,regex,python-2.7,Python,Regex,Python 2.7,我在计算文本文件中的字数,但我的程序也计算了一些我们不需要的字数,我在其中使用了r.e,但它没有给我任何适当的帮助 这是我的文本文件 import re sum=0 file = open("pro.txt").readlines() for lines in file: word= len(re.findall('(^|[^\w\-])able#1(?=([^\w\-]|$))', lines)) if word>0: su

我在计算文本文件中的字数,但我的程序也计算了一些我们不需要的字数,我在其中使用了r.e,但它没有给我任何适当的帮助 这是我的文本文件

import re
sum=0
file = open("pro.txt").readlines()
for lines in file:
        word= len(re.findall('(^|[^\w\-])able#1(?=([^\w\-]|$))', lines))
        if word>0:
                sum=sum+1
print sum
我不想让我的程序计数,
-able#1,able#1-able#1,can#1*able#1
这些类型的单词,我应该只计数
able#1

[^\W]*表达式表示匹配零个或多个非字母数字字符 所以它不会在“无法”中关心“联合国”

我会这样写regexp

[^\W]*able#1\W
\s+
是任何非零数量的空白
\S*
是任意数量的空白,包括零

编辑:针对后期需求更改进行修改,以匹配“_-able#”和“-able#”

[^\W]*表达式表示匹配零个或多个非字母数字字符 所以它不会在“无法”中关心“联合国”

我会这样写regexp

[^\W]*able#1\W
\s+
是任何非零数量的空白
\S*
是任意数量的空白,包括零


编辑:针对后期的需求更改进行了修改,以匹配“_-able#”和“-able#”

您可以使用正则表达式
\sable#1\s*$
,它要求在
able
之前有一个空格,并且允许在行尾有零个或多个空格(没有其他空格)

if re.search('\s+[-_]*able#\S*',lines):
您还可以使用
sum()
和以下生成器表达式进行计数:

import re
regex = re.compile(r'\sable#1\s*$')
count = 0
with open("pro.txt") as file:
    for line in file:
        if regex.search(line):
            count += 1
print count

您可以使用正则表达式
\sable#1\s*$
,它要求在
able
之前有一个空格,并且允许在行尾有零个或多个空格(没有其他空格)

if re.search('\s+[-_]*able#\S*',lines):
您还可以使用
sum()
和以下生成器表达式进行计数:

import re
regex = re.compile(r'\sable#1\s*$')
count = 0
with open("pro.txt") as file:
    for line in file:
        if regex.search(line):
            count += 1
print count

如果您只对计算完整单词感兴趣,可以这样做:

with open("pro.txt") as file:
    count = sum(1 for line in file if regex.search(line))
(?:\W |\A)
将匹配
行的开头
或与单词不相似的内容(即
[0-9a-z]


类似地,
(?=\W |\Z)
是一个前瞻性断言,用于
行的结尾或与单词不相似的内容。

如果您只对计算完整单词感兴趣,可以执行以下操作:

with open("pro.txt") as file:
    count = sum(1 for line in file if regex.search(line))
(?:\W |\A)
将匹配
行的开头
或与单词不相似的内容(即
[0-9a-z]



同样,
(?=\W |\Z)
是对
行的结尾
或与单词不同的内容的前瞻性断言。

@nhahtdh但我还必须通过此文本文件找到该单词对应的数字。在第一次出现哈希符号后删除所有内容如何?为什么不在删除第一次出现的所有内容后应用正则表达式“#”符号是否出现(可能再加上一个字符)?是的,但如果我匹配单词标签,我还必须找到与之对应的数字,如示例中的0 6 9above@Angel:对于每一行,将数据分为4部分
0
6
9
able\1
(可通过拆分完成,并限制零件数量),并检查最后一项以决定是否保留数据。@nhahtdh但我还必须通过此文本文件找到该单词的数字。在第一次出现哈希符号后删除所有内容怎么样?为什么不在删除第一次出现的“#”符号后应用正则表达式(可能再加上一个字符)?是的,但如果我匹配单词标签,我还必须找到与之对应的数字,如示例中的0 6 9above@Angel:对于每一行,将数据分成4个部分
0
6
9
able#1
(可通过拆分完成,但部分数量有限),并检查最后一项以决定是否保留数据。您可能想看看这个答案,它试图解释如何调试regexpi。我尝试了这个答案,因为它也可以计算可数的1-1-1,我只想计算可数的1-1或1-1我更改了我的r.e,但仍然有一点问题,我认为你的链接与我的工作无关这个链接是我写的关于如何在python即时评估模式下有效测试regexp的简短回答,你可能会发现它很有用。你可能想看看这个答案,它试图解释如何调试regexp。我尝试了这个答案,因为它也可以计算可数#1-able#1,我只想计算可数#1到可数#1或#1我更改了我的r.e,但仍然可以l还有一点问题,你的链接是我认为与我的工作无关的链接是我写的关于如何在python立即评估模式下有效测试regexp的简短回答,你可能会发现它很有用