计算第一个字符匹配的字符串

时间:2018-04-21 03:54:33

标签: python regex

寻找一种方法来计算以“#”作为第一个字符的字符串。

import re

def y():
    with open('test.conf', 'r') as rf:
    hitcount = 0
        for line in rf:
            if re.search(r'#*', line):
            hit_count = hit_count + 1
    print(hit_count)

当我使用脚本时...它会计算所有带#的字符串,无论它放在哪里。

下面是test.conf。结果应该只有4个。

#config-version=FWF60C-5.02-FW-build754-170421:opmode=0:vdom=0:user=lorenzo.aspera
#conf_file_ver=42514
#buildno=0754
#global_vdom=1
config sy###stem global
   END####

2 个答案:

答案 0 :(得分:2)

是的,您不应该使用re.search ...实际上,您不应该使用re全部。为什么不只是str.startswith

count = 0
with open('test.conf', 'r') as rf:
    for line in rf:
        if line.startswith('#'):
            count += 1

print(count)
4

如果您一直想要使用正则表达式,那么请使用re.match代替,锚点搜索到字符串的开头(re.search - 除非您在你的模式中使用SOL锚^ - 这就是你观察虚假数量的原因。)

或者,我喜欢简洁(但当然不是以可读性为代价),所以我会理解sum

with open('test.conf', 'r') as rf:
    count = sum(line.startswith('#') for line in rf) 

print(count)
4

答案 1 :(得分:0)

您的方法和对问题的描述似乎略有不同。

澄清一下,你想要的底部2个选项中的哪一个?

  1. 在#
  2. 之前找到#行的所有行
  3. 在#之前用#找到任何单词?
  4. 如果是(1),我相信coldspeed的答案将有助于达到目的。

    如果是(2),那么步骤如下:

    加载文件并分隔空格和换行符:

    words = open(file).read().split()
    

    检查每个单词的#

    count=0
    for (i in words): 
        if(i.startswith("#")):
            count+=1
    print(count)