我有一个正则表达式相关的问题。如果我有一个变量名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/