使用正则表达式和pythonic方式从字符串中提取字符

时间:2017-04-08 08:20:12

标签: python regex

我有一个这样的字符串:“32H74312” 我想提取一些部分并将它们放在不同的变量中。

first_part = 32 # always 2 digits
second_part = H # always 1 chars
third_part = 743 # always 3 digit 
fourth_part = 12 # always 2 digit

以pythonic方式有这种方法吗?

6 个答案:

答案 0 :(得分:2)

现在有理由使用正则表达式来完成这么简单的任务。 pythonic 方式可能类似于:

state.botframework.com

答案 1 :(得分:1)

由于您可以捕获固定数量的字符:

(\d\d)(\w)(\d{3})(\d\d)

然后,您可以使用re.match

pattern = r"(\d\d)(\w)(\d{3})(\d\d)"
string = "32H74312"

first_part, second_part, third_part, fourth_part = re.match(pattern, string).groups()

print(first_part, second_part, third_part, fourth_part)

哪个输出:

32 H 743 12

除非是因为你想要一种简单的方法来强制每个部分都是数字和单词字符。那么这不是你需要正则表达式的东西。

答案 2 :(得分:1)

如果String总是相同的长度,那么你可以这样做:

string =  "32H74312"
first_part = string[:2] #always 2 digits
second_part = string[2:-5] # always 1 chars
third_part = string[3:-2] # always 3 digit 
fourth_part = string[:6] # always 2 digit

答案 3 :(得分:1)

扩展Pedro's excellent answer,字符串切片语法是最好的方法。

然而,拥有first_partsecond_part等变量。 。 。 nth_part通常被视为反模式;你可能正在寻找一个元组

str = "32H74312"
parts = (str[:2], str[2], str[3:6], str[6:])

print(parts)
print(parts[0], parts[1], parts[2], parts[3])

答案 4 :(得分:1)

这也非常'pythonic':

string = "32H74312"
parts = {0:2, 2:3, 3:6, 3:6, 6:8 } 
string_parts = [ string[ p : parts[p] ] for p in parts ]

答案 5 :(得分:1)

您可以使用此方法:

import re

line = '32H74312'

d2p = r'(\d\d)' # two digits pattern
ocp = r'(\w)' # one char pattern
d3p = r'(\d{3})' # three digits pattern

lst = re.match(d2p + ocp + d3p + d2p, line).groups()
for item in lst:
    print(item)

括号是分组搜索元素所必需的。另外,为了让您的regexp测试更舒适,您可以使用特殊平台,例如regex101