【问题标题】:Delete something after the first of the line or a / (Regex)在第一行或 / (正则表达式)之后删除某些内容
【发布时间】:2012-11-14 08:50:18
【问题描述】:

我正在尝试使用匹配 /../ 之前的子字符串的正则表达式从字符串中删除某些内容,这些子字符串要么从开头开始,要么跟在 / 之后。

到目前为止我有

re.sub('(?<=[/]|\A).+(?=[/][.][.][/])', '', str)

当我尝试这个或其他变体时,我不断收到错误,从删除第一个 / 之后的所有项目到不删除分组的第一个字符。

【问题讨论】:

  • 请提供示例字符串和预期结果,这样更容易理解。
  • 该正则表达式甚至无法编译,因为(?&lt;=/|\A) 在 Python 正则表达式中是非法的(lookbehinds 必须具有恒定宽度,并且匹配 0 或 1 个字符)。
  • 基本上,我想采取类似 test/new/../ 并返回 test//../ 我发现使用后视将从 / 的第一个实例开始并继续到 /../ 而我想要 /../ 最接近 /../ 的实例并删除其间的所有内容。

标签: regex python-3.x


【解决方案1】:

看来/ 本身永远不可能成为比赛的一部分。因此,尝试

re.sub(r'[^/]*(?=/\.\./)', '', mystr)

[^/] 匹配任何不是/ 的字符,因此它从字符串的开头开始匹配,直到遇到/../,除非中间有/,在这种情况下匹配之后会开始。

【讨论】:

  • +1 你是对的,这样就不再需要后视了。
  • 非常感谢!有时我忘记了你可以做相反的事情。
猜你喜欢
  • 1970-01-01
  • 2015-07-26
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-22
相关资源
最近更新 更多