如何为循环中的数字添加数字

时间:2018-05-24 02:34:25

标签: python string python-2.7 loops

我有一长串郊区,我想做点什么

他们中有很多人有RDx(农村交付),其中x是1到30之间的数字

我想摆脱下面的RDx

for row in WorkingData['PatientSuburb']:
    if 'RD10' in str(row):
    WorkingData['PatientSuburb'].replace(regex=True,inplace=True,to_replace=r'RD10',value=r'')

我在想如果我可以运行一个循环并以某种方式增加数字,那就太棒了。这不会起作用,但它与我想做的事情一致:

for rd in range(1,31,1):
    if 'RD',rd in str(row):
    WorkingData['PatientSuburb'].replace(regex=True,inplace=True,to_replace=r'RD'rd ,value=r'')

如果我这样做,我会得到两个空格的输出:

for rd in range(1,31,1):
    print 'RD',rd
像这样:

RD 1
RD 2
RD 3
RD 4
RD 5
RD 6
RD 7
RD 8
RD 9
RD 10
RD 11
RD 12

我还需要弄清楚这件作品是如何起作用的......

to_replace=r'RD'rd 

我见过某人使用%符号来标记情节&然后它从引号之外引入一个值 - 但我不知道它是否是标签功能的一部分(我确实尝试过它并且根本不起作用) 这看起来像这样

to_replace=r'RD%' % rd 

对此有任何帮助都非常感谢!

2 个答案:

答案 0 :(得分:3)

如果你想使用for循环并用索引替换子字符串,那么我会说你几乎就在那里。

to_replace = 'RD%d' % i

'%'标记说明符的开头。在上面的例子中," d"遵循"%"这意味着在这里放置一个有符号整数小数。它与" printf"相同。 C中的库函数。如果"%"没有任何有效的转换字符,它不会改变任何东西,无论右侧是什么。

此处提供更多详细信息和示例:https://docs.python.org/3.6/library/stdtypes.html#printf-style-bytes-formatting

答案 1 :(得分:1)

即使你的问题是关于循环几个整数来生成字符串,看起来你的问题实际上更适合正则表达式。

这将允许您在一个中捕获多个案例,而不会循环可能的值。

>>> import re
>>> RD_PATTERN = re.compile(r'RD[1-3]?[0-9]')
>>>
>>> def strip_rd(string):
...     return re.sub(RD_PATTERN, '', string)
...
>>>
>>> strip_rd('BlablahRD5')
'Blablah'
>>> strip_rd('BlablahRD5sometext')
'Blablahsometext'
>>> strip_rd('BlablahRD10sometext')
'Blablahsometext'
>>> strip_rd('BlablahRD25sometext')
'Blablahsometext'

我提供的正则表达式无论如何都不是坚如磐石(例如,即使您指定了[1..30],它也匹配RD0),但您可以创建一个适合您特定用例的正则表达式。例如,检查模式是否在字符串的末尾可能是有意义的,如果预期的那样。

另外,请注意re.compile - 不需要模式(你可以直接给出模式字符串),但是既然你提到你有几行,它会更高效。