【问题标题】:Extracting strings in specified format in python在python中提取指定格式的字符串
【发布时间】:2020-05-04 15:35:22
【问题描述】:

我在 python 中编写代码以从字母数字字符中提取字符串。代码应该只提取字符串并以以下格式打印。

输入应该以IND1234AUS1234的形式给出(即字符必须由几个数字分隔)

对于上面的输入python代码应该提取字符串INDAUS并打印为IND to AUS

输入不得以上述以外的任何其他格式给出,如果格式错误,代码应打印无效输入。 (输入格式错误的示例为 1234INDAUS、IND1234、123IND123AUS、INDAUS1234)

以下是我尝试过的代码。它提取字符串,但我不知道如何分隔并打印为IND to AUS

我的程序只打印 INDAUS

test_string  = input()
only_alpha = ""
for char in test_string:
    if char.isalpha():
      only_alpha += char
print(only_alpha)

请帮我写代码。如上所述,我不知道要编写验证无效输入的代码。

【问题讨论】:

  • 你可以使用re.findall([A-Z]+,your_string)
  • 字母和数字的个数有限制吗?
  • 没有。字母和数字的数量没有限制。它的字母后跟数字,字母后跟数字。
  • 最好是至少有 2 或 3 个字符的字母,并且在 IND12AUS1234 等字母之后至少跟一个数字。

标签: python string


【解决方案1】:

你应该使用正则表达式来

  1. 验证内容[A-Z]+\d+[A-Z]+\d+:大写两次
  2. 同时检索大写内容([A-Z]+)\d+([A-Z]+)\d+括号使抓包组anr获取.groups()的内容
def extract(value):
    m = re.search(r"([A-Z]+)\d+([A-Z]+)\d+", value)
    if m:
        return " to ".join(m.groups())
    return "Invalid Input"

测试

value = "IND1234AUS1234 "
res = extract(value)
print(res)  # IND to AUS

value = "INDAUS1234 "
res = extract(value)  # Invalid Input
print(res)

检查每个部分的长度的正则表达式将是

"([A-Z]{2,5})\d{1,5}([A-Z]{2,5})\d{1,5}"

【讨论】:

  • @azro 对于无效输入,只需打印无效输入。
  • @AshokKumar 很抱歉告诉你,但这是非常基本的代码,不要称我为天才 ;) 你还必须理解它,理解它为什么返回好的字符串 a 以防万一,以及为什么在另一种情况下“无效”。我还进行了编辑,将检查每个部分长度的正则表达式放在末尾​​span>
【解决方案2】:

这看起来是使用正则表达式的完美方式:

def validate(a):
    match = re.match("([A-Z]+)[0-9]+([A-Z]+)[0-9]+", a)
    if not match:
        raise ValueError()
    else:
        return match[1] + " to " + match[2]

>>> validate("IND1234AUS1234")
"IND to AUS"
>>> validate("USD1234EUR1234")
"USD to EUR"
>>> validate("123IND123AUS")
Traceback (most recent call last):
  File "<pyshell#23>", line 1, in <module>
    validate("123IND123AUS")
  File "<pyshell#20>", line 4, in validate
    raise ValueError()
  File "<string>", line None
SyntaxError: <no detail available>

快速解释:"([A-Z]+)[0-9]+([A-Z]+)[0-9]+"

  • ([A-Z]+):一个或多个 A-Z 字符,放在括号中,以便我们稍后索引它们
  • [0-9]+:一位或多位数字

【讨论】:

  • 你应该提出ValueError而不是SyntaxError
  • @Ch3steR 现在已更改
猜你喜欢
  • 2017-12-21
  • 2016-10-15
  • 2019-03-13
  • 1970-01-01
  • 2019-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
相关资源
最近更新 更多