【问题标题】:How to add numbers into string for a loop如何将数字添加到字符串中以进行循环
【发布时间】:2018-05-24 02:34:24
【问题描述】:

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

其中很多都有 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 

对此的任何帮助将非常感谢!

【问题讨论】:

  • 这看起来真的很像XY problem。从 RD1 循环到 RD30 以检查每个字符串可以通过正则表达式替换来实现,这将更加高效和优雅。
  • @SamuelDion-Girardeau 这很“有趣”。你是对的 - 我试图简化这个问题。但不是那么多......我对正则表达式不太熟悉 - 你能给我一些关于如何用正则表达式处理这个问题的见解吗?
  • 您可以定义一个regular expression,而不是遍历可能的值并手动匹配字符串,它将匹配它们。我将通过代码示例发布答案。

标签: python string python-2.7 loops


【解决方案1】:

如果您想使用 for 循环并用索引替换子字符串,那么我会说您快到了。

to_replace = 'RD%d' % i

'%' 标记说明符的开始。在上面的示例中,“d”跟在“%”之后,这意味着在此处放置一个有符号整数小数。与 C 中的“printf”库函数相同。如果“%”后面没有任何有效的转换字符,则无论右侧是什么,它都不会改变任何内容。

更多细节和例子在这里:https://docs.python.org/3.6/library/stdtypes.html#printf-style-bytes-formatting

【讨论】:

    【解决方案2】:

    即使您的问题是关于循环多个整数以生成字符串,但您的问题似乎实际上更适合正则表达式。

    这将允许您一次捕获多个案例,而无需循环可能的值。

    >>> 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'
    

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

    另外,请注意re.compile-ing 模式不是必需的(您可以直接给出模式字符串),但由于您提到您有几行,所以它会更高效。

    【讨论】:

    • 谢谢。这是非常有效的。我确实尝试了两种方式,并且正则表达式快了一个数量级。但是这两个答案都帮助我学到了很多东西。感谢您发布指向 RE 文档的链接 - 对于指针,这将更有效!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 2014-06-05
    • 1970-01-01
    • 2014-11-14
    • 2015-07-31
    • 2022-11-30
    相关资源
    最近更新 更多