【问题标题】:Replace wildcard from string从字符串替换通配符
【发布时间】:2015-01-20 12:08:19
【问题描述】:

我有一个脚本正在创建这样的变量:

ex = "/Volumes/Obelix/5215.tif, /Volumes/Gemeinsam/25.tif, /Volumes/Obelix/5100.tif"

是否可以用/Volumes/Gemeinsam/*删除所有内容,所以我终于明白了:

ex = "/Volumes/Obelix/5215.tif, /Volumes/Obelix/5100.tif"

我不习惯 Python 中的通配符,所以我遇到了一些问题。我已经阅读了很多关于 re.sub() 的信息,但在这里无法使用。

【问题讨论】:

  • 只要相信,一切皆有可能。
  • 你可以试试正则表达式。
  • 是的,有可能。 "cant [sic] get it work here" 到底是什么意思 - 代码在哪里,有什么问题?
  • 如果您不发布代码,那么我唯一的建议是将Gameinsam 子文件夹移出主文件夹...在那里,完成;)

标签: python replace wildcard


【解决方案1】:

Python 并不真正处理通配符。您应该阅读更多关于 Regex 的信息,它不是 Python 特定的。

无论如何,这应该照顾它:

ex = "/Volumes/Obelix/5215.tif, /Volumes/Gemeinsam/25.tif, /Volumes/Obelix/5100.tif"
newex = re.sub(r'/Volumes/Gemeinsam/.+?,?(\s|$)', '', ex)

【讨论】:

  • 我不明白 .+?,?(\s|$) 到底是什么意思,但这正是我想要的。
  • .+?,?告诉它匹配最后一个斜杠之后的任何文件名,带或不带逗号(实际上,,? 并不是必需的,但它可能有助于清晰)。 (\s|$) 告诉它在空格或字符串末尾停止匹配,这样它就不会匹配第一个 /Volumes/Gemeinsam/ 之后的所有内容。
【解决方案2】:

根据您对数据的确定程度,您必须进行一些预解析,但您可以使用in 运算符来检查一个字符串是否包含另一个字符串。然后,您可以根据最易读的内容使用循环或列表推导。

ex = [x.strip() for x in "/Volumes/Obelix/5215.tif, /Volumes/Gemeinsam/25.tif, /Volumes/Obelix/5100.tif".split(',')]
check = "/Volumes/Gemeinsam"
new_ex = [x for x in ex if check not in x]

【讨论】:

  • strip 根本不需要;使用split(', ') 删除空格。但也许你应该在之后join 它重新组合在一起?
  • @tobias_k split(",") 不会删除空格
  • @jonrsharpe 哎呀,对;以为他在使用split(', ')
猜你喜欢
  • 2012-11-21
  • 2012-02-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-11
  • 2016-10-08
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
相关资源
最近更新 更多