我有一个正则表达式相关的问题。如果我有一个变量名nodeName,我正在从.csv文件中读取它,则它可能看起来像以下任何一个:E1_40873886,E2_40873886、40873886、40873886-A,40873886-B。我可以用if elif ... else编写一长段代码,但我想知道python的regex是否具有更智能的方式来做到这一点。另外,我无法像if '40873886' in {entry}:这样对40873886进行硬编码,因为.csv文件具有一百万个整数,并且具有不同的numberID。

最佳答案

您可以通过str.translate保留数字,_上的splittin可以为您提供单个字符串,也可以为_之后的子字符串,您可以在其中删除任何尾随-或大写字母:

from string import ascii_uppercase
nodeName.split("_")[-1].translate(None,ascii_uppercase+"-")


输出:

In [44]: nodeName = "E1_40873886"

In [45]: nodeName.split("_")[-1].translate(None,ascii_uppercase+"-")
Out[45]: '40873886'

In [46]: nodeName = "40873886-B"

In [47]: nodeName.split("_")[-1].translate(None,ascii_uppercase+"-")
Out[47]: '40873886'

In [48]: nodeName = "40873886"

In [49]: nodeName.split("_")[-1].translate(None,ascii_uppercase+"-")
Out[49]: '40873886'


您还可以rstrip而不是翻译:

nodeName.split("_")[-1].rstrip(ascii_uppercase+"-")


如果您始终有8个连续数字,则还可以使用一个简单的正则表达式:

import  re
s = "E2_40873886"
print(re.search("\d{8}",nodeName).group())

关于python - 忽略所有字符,仅从字符串中读取数字部分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31599958/

10-15 16:19