我需要重写我的简单代码。我得到如下简单字符串:
我将使用.split()“Distrib”之后的所有单词,并且我必须满足以下条件:
如果字符串[0]是文本,字符串[1]是整数,则只将这些字符串合并,得到结果“ABC/1”
如果字符串[0]是文本,字符串[1]是文本,则只将它们连接起来,然后得到结果“ABC/DEF”
如果字符串[0]是文本,&;字符串[1]是文本,&;字符串[2]是文本,则将它们全部连接起来,得到结果:“ABC/DEF/GHI”
我写了一个简单的代码来实现这一点,但我真的很感兴趣如何写它不那么复杂,更可读;)
import re
def main_execute():
#input_text = "Distrib ABC 1-2-x"
#input_text = "Distrib ABC DEF 1-2-x"
#input_text = "Distrib ABC DEF GHI 1-2-x"
print(str(input_text))
load_data = re.search('\s[A-Z]*.[A-Z]*.[A-Z]+ [0-9]', input_text).group()
print("Pobrany ciąg znaków: " + load_data)
words_array = load_data.split()
if re.match('[0-9]', words_array[1]):
print("Złożony ciąg: "
+ words_array[0]
+ "/"
+ words_array[1])
elif re.match('[A-Z]', words_array[0]) and re.match('[A-Z]', words_array[1]) and re.match('[0-9]', words_array[2]):
print("Złożony ciąg: "
+ words_array[0]
+ "/"
+ words_array[1])
elif re.match('[A-Z]', words_array[0]) and re.match('[A-Z]', words_array[1]) and re.match('[A-Z]', words_array[2]) and re.match('[0-9]', words_array[3]):
print("Złożony ciąg: "
+ words_array[0]
+ "/"
+ words_array[1]
+ "/"
+ words_array[2])
if __name__ == "__main__":
main_execute()
在@Jan的答案的基础上,您可以使regex更易于阅读:
结果是一样的:
这可以大大简化为
这就产生了
请参见表达式on regex101.com的演示。
@Wiktor提出的另一种方法是
部分
[^\W\d]+
是说:不是不是(加倍是没有错误的!)单词字符,而不是数字,尽可能长。你知道吗相关问题 更多 >
编程相关推荐