繁体   English   中英

Python 在第一个非字母字符处拆分字符串

[英]Python Split String at First Non-Alpha Character

假设我有诸如'ABC)D.' 'AB:CD/' 我怎样才能在第一个非字母字符处拆分它们以['ABC', 'D.']['AB', 'CD/']结尾? 没有正则表达式有没有办法做到这一点?

一种选择是查找第一个非字母字符的位置:

def split_at_non_alpha(s):
    try:
        split_at = next(i for i, x in enumerate(s) if not x.isalpha())
        return s[:split_at], s[split_at+1:]
    except StopIteration: # if not found
        return (s,)

print(split_at_non_alpha('ABC)D.')) # ('ABC', 'D.')
print(split_at_non_alpha('AB:CD/')) # ('AB', 'CD/')
print(split_at_non_alpha('.ABCD')) # ('', 'ABCD')
print(split_at_non_alpha('ABCD.')) # ('ABCD', '')
print(split_at_non_alpha('ABCD')) # ('ABCD',)

您可以使用循环

a = 'AB$FDWRE'
i = 0
while i<len(a) and a[i].isalpha():
    i += 1

>>> a[:i]
'AB'
>>> a[i:]
'$FDWRE'

使用for loopenumerate和字符串索引:

def first_non_alpha_splitter(word):
    for index, char in enumerate(word):
        if not char.isalpha():
            break
    return [word[:index], word[index+1:]]

结果

first_non_alpha_splitter('ABC)D.')
# Output: ['ABC', 'D.']

first_non_alpha_splitter('AB:CD/')
# Output: ['AB', 'CD/']

Barmar 的建议对我来说效果最好。 其他答案的执行时间几乎相同,但我选择前者是为了便于阅读。

from itertools import takewhile

str = 'ABC)D.'
alphStr = ''.join(takewhile(lambda x: x.isalpha(), str))

print(alphStr) # Outputs 'ABC'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM