寻找一种方法来计算以“#”作为第一个字符的字符串。
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####
答案 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),我相信coldspeed的答案将有助于达到目的。
如果是(2),那么步骤如下:
加载文件并分隔空格和换行符:
words = open(file).read().split()
检查每个单词的#
count=0
for (i in words):
if(i.startswith("#")):
count+=1
print(count)