【问题标题】:Python String Slicing from known word in stringPython字符串从字符串中的已知单词切片
【发布时间】:2016-09-09 17:03:30
【问题描述】:

我正在尝试读取由另一个函数(在我的控制之外)写入的变量,以查找已知单词的存在,然后复制从已知单词开始并在行尾或| 分隔符。 所以我想根据我写的一个简单的if 语句写入这个变量,但目前它没有考虑变量中已经存在的内容并且它需要考虑。由于我正在编写的代码使用了各种别名,因此我试图简化我在下面所做的事情

因此,首先将变量“设备”写入其他地方但我可以使用。 我正在读取另一个变量“area”,如果专门设置为“3”,我需要用字符串“box2|box3”(或“box3|box2”——没关系)写入变量“devices”我可以忽略“设备”的现有内容,除非它在字符串中包含“box1”。它可能出现在字符串中的任何位置,也可能会被其他数据附加,但它总是在行尾结束,或者以| 分隔符结束。所以我需要读取整个变量,寻找 'box1' 的存在,并将尽可能多的字符读入另一个变量,直到它的行尾到达| 分隔符。

我在这里真正可以分享的唯一代码是:

area = "3"
if area == "3":
    devices = "box2|box3"
print devices

假设 'devices' 包含 'box5|box6_standard|box9|box8_ex_345|box1_182',我需要从该字符串中额外添加 box1_182(并在我编写 'devices' 变量时将其附加回来 - 我不需要担心该变量的任何其他预先存在的内容。

作为另一个例子,现有的“设备”变量可能包含“盒子7|盒子1_345|盒子6|盒子8_ex_345”,在这种情况下,我需要在写“盒子2”之前将“盒子1_345”附加到设备字符串中|box3' 到它 ('box2|box3|box1_182')

【问题讨论】:

  • 你能澄清一下:1)你有什么,2)你需要得到什么。在下一个管道之后提取某些内容的正则表达式方法是re.search(r'word([^|]+)', s).group(1)。但是,我觉得你需要在字符串中插入一些东西,然后re.sub 似乎更贴切。
  • depperm 几乎一针见血 - 他的代码在我需要的变量中搜索了单词的开头 - 问题是在测试中,我创建的字符串拉出并重复使用,包含 A-Z、0-9、-、:我想切出的最后一个字符串是 -box5:sec_er_i:0:|box1:ed_146_rfd:0:|box9:sad_er_:4: - 我需要的是 box1:ed_146_rfd:0:

标签: python string slice


【解决方案1】:

我会使用正则表达式和in 单词来检查devices 是否有'box1'。如果是这样,那么只需将其附加到新的devices 字符串

import re

devices='box5|box6_standard|box9|box8_ex_345|box1_182'
area = "3"
if area == "3":
    tdevices = "box2|box3"
    if 'box1' in devices:
        t=re.search('box1[0-9_:a-zA-Z]*', devices)
        devices=tdevices+'|'+t.group()
    else:
        devices=tdevices
print devices

【讨论】:

  • 感谢 depperm,我已经对此进行了测试,它几乎可以正常工作 - 最后读取的字符串是 'box5:sec_er_i:0:|box1:ed_146_rfd:0:|box9:sad_er_:4:' - 并且我需要的位是 'box1:ed_146_rfd:0:'
猜你喜欢
  • 2019-07-25
  • 2020-11-27
  • 2014-07-21
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
  • 2021-05-01
  • 2015-04-28
相关资源
最近更新 更多