如何将评论添加到任意数量的行?

时间:2012-03-14 00:01:23

标签: python regex string

输入字符串后,例如:'3,11,15,16,35'
如果你想让每个数字代表某些代码的行号,
为了向这些行添加注释, 你会做什么?

更具体地说,在迭代每行代码的for循环中,如何检查字符串以查看它是否包含当前行号。 这是我尝试过的相关部分:

self.num = input('Line(s) to number?')
self.linelist = self.code.splitlines()

for i, element in enumerate(self.linelist):
    self.count += 1
    # if match(str(self.count) + r",", self.num):
    if self.num.find(str(self.count) + ','):
        self.final = self.final + element + ' # line ' + str(self.count) + '\n'
    else:
        self.final = self.final + element + '\n'

re.match尝试仅对字符串中的第一个行号进行注释 find尝试似乎与第一个匹配 会评论与该号码相关联的行以外的所有内容 此设置的另一个问题是,如果列表中有1,,则可以找到11,

1 个答案:

答案 0 :(得分:3)

问题是,您在find语句中直接使用if的结果。只需看看find返回的内容:

  

返回s中找到子字符串sub的最低索引   该sub完全包含在s [start:end]中。失败时返回-1。   开始和结束的默认值以及负值的解释是   与切片相同。

因此,您将获得与integer对应的第一场比赛的索引或-1。当您执行if an_integer:时,它实际上正在执行if bool(an_integer):。对于bool(an_integer)Falsean_integer==0,对于其他所有内容,Trueelse。这意味着,如果您在输入的开头找到了行号,那么您将在if部分进行操作,而对于其他所有内容,您将if self.num.find(str(self.count) + ',') >= 0: 部分。您需要执行以下操作:

re.match

表示匹配。

对于re.match部分,re.search尝试匹配字符串开头的子字符串。您应该使用11,代替。

话虽如此,即使有了这些修正,即使使用分隔符,您仍然会遇到不匹配问题。 1,将匹配11,self.num = input('Line(s) to number?').split(",") # ... if str(self.count) in self.num: #... 。要解决此问题,您可以使用分隔符拆分输入并获取值列表。然后,您可以检查该值是否在该列表中:

enumerate

作为一个小旁注,您已经在使用self.count来获取行号。这应该消除使用计数器(即1)。如果您希望它们从enumerate开始,您可以通过提供可选的第二个参数告诉for i, element in enumerate(self.list, 1): 这样做:

i

然后,使用self.count代替{{1}}。