Python re.search正则表达式- 如何搜索字符串的最后4位数字

3

我已经编写了一个Python脚本(我的第一个),它接受字符串输入,然后使用re.search从字符串中创建组以供以后使用。

输入字符串可能如下所示:

NSC_sdiakjfean=ffffffff3c19594d45525d5f4f58455e445a4a423660

我目前使用的 re.search 是:

s = re.search('NSC_([a-zA-Z0-9\-\_\.]*)=[0-9a-f]{8}([0-9a-f]{8})[0-9a-f]{24}([0-9a-f]{4})',name)

我发现的问题是有时我想要使用的输入缺少这个部分[0-9a-f]{24},因此我的Python脚本会崩溃并出现异常,无法捕获最后一组。
是否有任何正则表达式(是的,我已经在谷歌上搜索了很多),可以用于从输入字符串的末尾开始匹配最后4位数字,并进行分组?
提前感谢。
亚当

2
你具体得到了什么异常?(顺便说一句,[a-zA-Z0-9-_.]是错误的。如果您要匹配它,请将破折号放在末尾 [a-zA-Z0-9_.-] - Tomalak
2个回答

2

$ 匹配字符串的结尾。

>>> import re
>>> re.search("1234$","lkjlkj1234") # matches
<_sre.SRE_Match object at 0x6a10578>
>>> re.search("1234$","lkjlkj1234ff") # does not match
>>>

所以你可能需要的表达是
s = re.search('([0-9a-f]{4})$',name)

好的,使用$符号在结尾处是有效的,但是如果一些输入字符串在最后4位数字之前可能有24个字符,而另一些则没有,我该如何处理这种情况?如果我删除[0-9a-f]{24},那么对于较短的字符串来说就没问题了,但对于完整长度的字符串就不行了,如果你明白我的意思的话。 - Adam Maxwell
哦,对了。s = re.search('NSC_([a-zA-Z0-9\-\_\.]*)=[0-9a-f]{8}([0-9a-f]{8}).*([0-9a-f]{4})$',name)怎么样?应该可以捕获两种类型的行。如果不起作用,您可以始终测试s的二进制值以查看是否匹配。 - Sideshow Bob

1

您不需要使用正则表达式来查找字符串的最后4个字符的值,只需像这样使用:

s = 'NSC_sdiakjfean=ffffffff3c19594d45525d5f4f58455e445a4a423660'
print s[-4:]

1
他正在尝试创建数据点组以供稍后引用,这些组包含整行内容。你所描述的只会给他当前字符串的最后四个字符。 - Drahkar
我没有考虑到只是切片字符串,即使我在脚本的其他地方已经这样做过。 - Adam Maxwell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接