使用python的正则表达式不起作用
我在计算文本文件中的字数,但我的程序也计算了一些我们不需要的字数,我在其中使用了r.e,但它没有给我任何适当的帮助 这是我的文本文件使用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
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的简短回答,你可能会发现它很有用