【问题标题】:How to split a string in python by certain characters?如何用某些字符分割python中的字符串?
【发布时间】:2022-01-03 15:04:17
【问题描述】:

我正在尝试解决前缀表示法的问题,但我被困在我想将字符串拆分为数组的部分: 如果我有输入 +22 2 我想让数组看起来像这样:['+', '22', '2'] 我尝试使用

import re 

函数,但我不确定它是如何工作的。 我试过了

word.split(' ')

方法,但它只对空格有帮助..有什么想法吗? PS: 在前缀符号中,我还将有 + - 和 *。 所以我需要拆分字符串,所以空格不在数组中,而+,-,*在数组中 我在考虑

word = input()
array = word.split(' ')

然后我想用这 3 个字符分割一个字符串。

示例输入: '+-12 23*67 1'

输出: ['+', '-', '12', '23', '*', '67', '1']

【问题讨论】:

  • 您的所有“单词”是否都采用完全相同的模式 - 前面是 +,然后是一些数字,然后是空格,然后是更多数字?
  • 我的输入是前缀符号,所以它就像:+-21 24*23 12
  • @Norbi 您能否在您的问题中提供一些示例输入
  • 好的,这比你原来的问题要复杂很多...

标签: python python-3.x list


【解决方案1】:

您可以使用re 在文本中查找模式,您似乎正在寻找以下任一模式:+-* 或数字组。所以编译一个寻找它的模式并找到所有匹配这个模式的东西,你会得到一个列表:


import re

pattern = re.compile(r'([-+*]|\d+)')

string = '+-12 23*67 1'
array = pattern.findall(string)
print(array)

# Output:
# ['+', '-', '12', '23', '*', '67', '1']

还有一些测试(将示例字符串与预期输出进行比较):

test_cases = {
    '+-12 23*67 1': ['+', '-', '12', '23', '*', '67', '1'],
    '+22 2': ['+', '22', '2']
}

for string, correct in test_cases.items():
    assert pattern.findall(string) == correct

print('Tests completed successfully!')

模式说明(您可以在下面链接的文档中阅读有关此内容):
r'([-+*]|\d+)'
r 在前面使其成为原始字符串,以便 Python 从字面上解释所有字符,这有助于正则表达式模式中的转义序列,因为您可以使用一个反斜杠
(...) 括号来转义它们(在这种情况下它们不是必需的)表示一个组,以后可以在需要时检索(但在这种情况下它们不需要很重要)
[...] 表示可以匹配该组中的任何单个字符,因此如果存在-+* 中的任何一个,它将匹配
| 逻辑@987654336 @,表示可以匹配任一侧(在这种情况下区分数字和特殊字符)
\d 数字的特殊转义序列,表示匹配任何数字,+ 表示匹配任何一个或多个数字

有用:

  • re module,那里的文档解释了模式中每个字符的作用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    相关资源
    最近更新 更多