在python中使用字符speci拆分

2024-09-26 21:59:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个字符串中拆分,该字符串遍历一个具有值的数组,此拆分必须包含以下规则:

  • 当有特殊字符时,将字符串分成两部分,并选择第一部分作为结果

脚本

array = [
'srv1 #s',
'srv2;192.168.9.1'
]

result = []
for x in array:

  outfinally = [line.split(';')[0] and line.split()[0] for line in x.splitlines() if line and line[0].isalpha()]

  for srv in outfinally:
      if srv != None:
          result.append(srv)

for i in result:
  print(i)

输出

srv1
srv2;192.168.9.1

所需输出

srv1
srv2

Tags: and字符串inforif规则line数组
3条回答

问题就在这里:line.split(';')[0] and line.split()[0]

你的第二个条件在空白处分裂。因此,除非输入的开头有分号(在这种情况下得到的是空字符串),否则它总是返回空格分割版本。你知道吗

您可能希望将两个拆分链接起来:

line.split(';')[0].split()[0]


要查看问题中的代码在做什么,请查看条件表达式在几种不同情况下的作用:

array = ['srv1 s', 'srv2;192.168.9.1', ';192.168.1.1', 'srv1;srv2 192.168.1.1']

>>> for item in array:
...   print("Original: {}\n\tSplit: {}".format(item, item.split(';')[0] and item.split()[0]))
...
Original: srv1 s
        Split: srv1 # split on whitespace
Original: srv2;192.168.9.1
        Split: srv2;192.168.9.1 # split on whitespace!
Original: ;192.168.1.1
        Split: # split on special char, returned empty which is falsey, returns empty str
Original: srv1;srv2 192.168.1.1
        Split: srv1;srv2 # split only on whitespace

您可以使用两个不同的分隔符进行两次拆分:

result = [s.split()[0].split(';')[0] for s in array]

result变成:

['srv1', 'srv2']

这应在任何特殊章程上进行拆分,并将拆分的第一部分附加到新列表中:

array = [
'srv1 #s',
'srv2;192.168.9.1'
]

sep = (r'[`\-=~!@#$%^&*()_+\[\]{};\'\\:"|<,./<>?]')
rest = text.split(sep, 1)[0]
new_array =[]
for i in array:
    new_array.append(re.split(sep,i)[0])

输出:

['srv1 ', 'srv2']

相关问题 更多 >

    热门问题