我正在尝试使用像“PR405j”这样的字符串并将其分成两个字符串。在这种情况下,两个字符串将是“PR”和“405j”。我必须要做各种各样的字符串。 Exmaples: “ACR498”将是“ACR”和“498”,“FR707e”将是“FR”和“707e”,“TY699l”将是“TY”和“699l”,依此类推。
我遇到的问题是将第一部分与第二部分分开。两边的字符数不同,第二个字符串(带数字的字符串)也可能有也可能没有字母字符。所有这些字符串之间唯一的共同点是你可以根据整数的第一个实例来划分它们。
我认为一个for循环遍历原始字符串中的每个字符,并在内部构建两个单独的字符串可以工作,但我只能认为基于整数和字母字符的分离,这将使“PR405j”之类的东西转向进入“PRj”和“405”。
我还认为拆分字符串方法会有所帮助,但是这些字符串中没有一个字符是共同的。
最后,我不能根据字符串开头的字母字符数来分割字符串(比如说“PR405j”为2),因为字符串之间存在差异。
如果有人能帮助我,我会非常感激。谢谢!
答案 0 :(得分:5)
您可以使用正则表达式进行简单的字符串匹配,例如此类。表达式'(\ D +)(。+)'表示'将一个或多个非数字提取为第一个组,然后提取一个或多个其他字符作为第二个。'
import re
inputs = ['PR405j']
for input in inputs:
match = re.match('(\D+)(.+)', input)
start = match.group(1)
end = match.group(2)
print input, start, end
答案 1 :(得分:0)
编辑:我误解了这个问题,以为你想要3组,而不是2组。 Zack Bloom的答案更为正确,但我会将此作为参考,以防有人提出类似的问题。
您可以使用re.split
:
>>> re.split(r'(\d+)', 'PR405j')
['PR', '405', 'j']
这里的技巧是使用捕获组(带括号)作为正则表达式来拆分;这将导致输出包含导致拆分的部分以及它两侧的部分。如果您的字符串中包含由非数字分隔的多个数字组,则会完全拆分字符串:
>>> re.split(r'(\d+)', 'PR405j123abc')
['PR', '405', 'j', '123', 'abc']
答案 2 :(得分:0)
re.split,就像其他答案一样。但是你必须用它来处理分组:
import re
re.split(r'([a-zA-Z]+)', 'PR405j', 1)[1:]