我有一个这样的字符串:“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方式有这种方法吗?
答案 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_part
,second_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