把字符串分成整数部分和字符串部分的最佳方法是什么?

2024-05-15 01:03:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似“11547QSD”的字符串。我想把它分成两部分“11547”和“QSD”。我得到了isnumeric()函数的提示。我正在做一个概述下来。请给我一个最好的分割方法。在

 str1 = "11547QSD"    # is a valid string (in my context)
 str2 = "ABC98765"    # is a valid string
 str3 = "111ABC111"   # is not a valid string

 if str1.isvalid():
    str1_int = str1.integer_part()
    str1_str = str1.string_part()

提前谢谢


Tags: 方法函数字符串instringismycontext
3条回答

可以对命名组使用正则表达式。在

基本上,您首先创建正则表达式(我创建了两个,对于这两种情况:数字优先还是字母优先)。然后检查输入是否匹配。如果是这样的话,则在结果匹配对象上调用groupdict(),以获得类似于{'digits':'11547', 'letters':'QSD'}的字典。那你就用它(我打印了)。在

遵循上述建议的完整示例:

>>> import re
>>> checks = [
    re.compile(r'^(?P<digits>\d+)(?P<letters>\D+)$'),
    re.compile(r'^(?P<letters>\D+)(?P<digits>\d+)$'),
]
>>> inputs = ['11547QSD', 'ABC98765', '111ABC111']
>>> for item in inputs:
    for check in checks:
        if check.match(item):
            print('Digits are {digits}, letters are {letters}'.format(
                **check.search(item).groupdict()
            ))
            break
    else:
        print('%s is incorrect' % (item,))


Digits are 11547, letters are QSD
Digits are 98765, letters are ABC
111ABC111 is incorrect

缩短版

如果您了解以上内容,可以缩短代码并创建结果dict(匹配字符串结果组),如下所示:

^{pr2}$

注意

我使用了元字符\d和{}。第一个基本意思是“数字”,第二个意思是“非数字”。关于它们含义的详细信息是here。在

我认为regex应该是最好的解决方案,例如:

import re
re.split(r'(\d+|\(|\))', '11547QSD')

from string import ascii_letters, digits
s_int, s_str = sorted([s.strip(ascii_letters), s.strip(digits)])
is_valid = s in {s_int+s_str, s_str+s_int}

相关问题 更多 >

    热门问题