【问题标题】:How do I remove all characters after a certain one, inside a list如何删除列表中某个字符之后的所有字符
【发布时间】:2021-03-06 05:02:56
【问题描述】:

我的问题是:

我有一个列表,经过多次清理后,其中包含看起来像“455XYZ455”的元素。我试图删除 X 之后的所有内容,但它在列表中。允许我这样做的代码如下:

check = [re.sub(r'\W', '', i) for i in content]
# print(check)
check2 = [re.sub('[aclassnewpagehref]', '', i) for i in check]
# print(check2)
check3 = [re.sub('[/<=""]', '', i) for i in check2]
# print(check3)
check4 = [item for item in check3 if item != '']
print(check4)

正如预期的那样,它给了我很多“455XYZ455”。我只想要'455',但这是一个列表。 作为 Python 的一个完整的初学者,我完全被困住了。 感谢您阅读并帮助我!

【问题讨论】:

  • 您的代码似乎无法解决您所描述的问题...您确定吗?
  • 老实说,我的代码有点(非常)乱,检查后,这个是用来抓取只有一定长度的元素。我的错。这是我用来清理列表中的混乱的许多小代码之一。
  • 建议您解决这个问题并编辑您的问题,以便人们认真对待您的问题...无论如何,祝您好运,欢迎来到 python 世界!
  • 我刚刚做到了!谢谢你的朋友。

标签: python string list loops split


【解决方案1】:

您可以捕获第 1 组中要保留的第一个数字,并从 X 开始删除其余数字。

\A(\d+)X.*\Z

说明

  • \A 字符串开始
  • (\d+)Xgroup 1中捕获1+个数字,然后匹配X
  • .*\Z 匹配任意字符 0+ 次并断言字符串结尾

regex demo

例如

import re
final = ["455XYZ455", "455XYZ455"]
for item in final:
    print(re.sub(r"^(\d+)X.*\Z", r"\1", item))

输出

455
455

【讨论】:

  • 其实我的代码中已经有一点正则表达式了。我将编辑我的帖子,向您展示真正用于过滤列表的代码。
  • 很棒的答案!
【解决方案2】:

你可以通过不使用正则表达式的 split 来做到这一点。假设字符串 '455XYZ455' 在变量 a 中。

s = a.split('x')[0]

这里 a 将被 'x' 分割,它会返回 'x' 之前和之后的部分列表,但由于您只需要 'x' 之前的部分,我已将列表的第一个元素分配给 s。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    • 2022-01-26
    • 1970-01-01
    • 2017-01-04
    • 2021-12-04
    • 2023-01-18
    • 1970-01-01
    相关资源
    最近更新 更多