如何在Python中第一次出现字母时分割字符串?

LJD*_*200 5 python regex arrays string split

A 有一系列格式如下的字符串。演示示例如下所示:

71 1 * abwhf

8 askg

*14 snbsb

00ab

我正在尝试编写一个 Python 3 程序,该程序将使用for循环循环遍历每个字符串,并在第一次出现字母时将其拆分为包含两个元素的列表。

上面字符串的输出将成为包含以下元素的列表:

71 1 *abwhf

8askg

*14snbsb

00ab

前三个示例的第一个字符串后面应该有一个空格,但这仅显示在编辑器

我怎样才能以这种方式分割字符串?

这里有两篇文章看起来相关:

第一个问题的第一个答案允许我在第一次出现单个字符而不是多个字符(如字母表中的所有字母)时分割字符串。

第二个允许我在第一个字母处分割,但不仅仅是一次。使用它会产生一个包含许多元素的数组。

C_Z*_*_Z_ 5

使用re.search

import re

strs = ["71 1 * abwhf", "8 askg", "*14 snbsb", "00ab"]


def split_on_letter(s):
    match = re.compile("[^\W\d]").search(s)
    return [s[:match.start()], s[match.start():]]


for s in strs:
    print split_on_letter(s)
Run Code Online (Sandbox Code Playgroud)

正则表达式[^\W\d]匹配所有字母字符。

\W匹配所有非字母数字字符并\d匹配所有数字字符。^在集合的开头反转选择以匹配所有不是的内容(非字母数字或数字),这对应于所有字母。

match搜索字符串以查找匹配表达式第一次出现的索引。您可以根据匹配的位置对原始字符串进行切片以获得两个列表。