【问题标题】:python re.search regex - how to search for value in the last 4 digits of a stringpython re.search regex - 如何在字符串的最后 4 位中搜索值
【发布时间】:2012-01-25 13:12:00
【问题描述】:

我已经编写了一个 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 位进行分组?

提前致谢。

亚当

【问题讨论】:

  • 你得到了什么异常,确切地说? (顺便说一句,[a-zA-Z0-9-_.] 是错误的。如果你想匹配它,你应该把破折号放在最后[a-zA-Z0-9_.-]

标签: python regex


【解决方案1】:

$ 匹配字符串的结尾。

>>> 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} 是否适用于较短的字符串但不适用于全长字符串?如果这有意义吗?
  • 哦,对了。 s = re.search('NSC_([a-zA-Z0-9\-\_\.]*)=[0-9a-f]{8}([0-9a-f]{8}).*([0-9a-f]{4})$',name) 怎么样?应该捕获这两种类型的线。如果这不起作用,您可以随时测试s 的二进制值以查看它是否匹配。
【解决方案2】:

您不需要正则表达式来查找字符串的最后 4 个符号的值,您可以使用以下内容:

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

【讨论】:

  • 他正在尝试制作包含整行的数据点组以供以后参考。你描述的只会给他当前字符串的最后四个字符。
  • 我没想过只对字符串进行切片,即使我在脚本中的其他位置之前已经完成了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多