【问题标题】:Extract string with specific format提取特定格式的字符串
【发布时间】:2017-12-21 12:57:38
【问题描述】:

我是 Python 新手,我正在尝试从另一个具有特定格式的字符串中提取一个字符串,例如:

我有原始字符串:-

--@$_ABC1234-XX12X

我需要准确提取字符串ABC1234(必须包含三个前字符,后跟四个数字)。

【问题讨论】:

  • 到目前为止有什么尝试吗?不先尝试就提出问题通常是不受欢迎的。
  • 那么你想检查字符串ABC1234是否在原始字符串中?或者你想得到它之前的三个字符和它之后的四个字符?
  • 我已经尝试过,但仍然无法成功。我想从原始字符串中准确获取字符串 ABC1234。

标签: python string python-3.x


【解决方案1】:

您可以使用花括号 repetition qualifiers {} 来匹配三个字母字符和四个数字字符:

>>> from re import search
>>> 
>>> string = '---@$_ABC1234-XX12X'
>>> match = search('[a-zA-Z]{3}\d{4}', string)
>>> match
<_sre.SRE_Match object; span=(6, 13), match='ABC1234'>
>>> match.group(0) # Use this to get the string that was matched.
'ABC1234'

正则表达式的解释:

  • [a-zA-Z]: 匹配任意字母大写小写...
  • {3}: 正好三倍。还有...
  • \d: 任意数字字符...
  • {4} 正好四次。

【讨论】:

  • 非常感谢。我没有用正则表达式得到它
【解决方案2】:

如果你现在知道字符串的确切坐标,你可以使用这样的东西:

>>> var = "--@$_ABC1234-XX12X"
>>> newstring = var[5:12]
>>> newstring
'ABC1234'

python 字符串有一个 slice 方法。

【讨论】:

  • 谢谢。但我更喜欢搜索方法,字符串的位置应该灵活。
【解决方案3】:

您可以在 Python 中使用re 模块

matcher = re.search((?P<matched_string>[a-zA-Z]{3}\d{4}))
needed_string = matcher.groupdict()['matched_string']

needed_string 将是您想要的输出。

re 模块请参考:https://docs.python.org/3.4/library/re.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 2020-07-09
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    相关资源
    最近更新 更多