当前位置: 首页 > 面试题库 >

如何用python re.sub只替换部分匹配

黎曾笑
2023-03-14
问题内容

我需要通过一个reg表达式匹配两种情况并进行替换

‘long.file.name.jpg’->’long.file.name_ suff .jpg’

‘long.file.name_ a .jpg’->’long.file.name_ suff .jpg’

我正在尝试执行以下操作

re.sub('(\_a)?\.[^\.]*$' , '_suff.',"long.file.name.jpg")

但这被削减了扩展名“ .jpg”,我得到了

long.file.name_suff。而不是long.file.name_suff.jpg我理解这是由于[^。] * $部分,但是我不能排除它,因为我必须找到要替换的’_a’或最后的’.a。

有没有办法只替换部分比赛?


问题答案:
 re.sub(r'(?:_a)?\.([^.]*)$', r'_suff.\1', "long.file.name.jpg")

?:启动一个不匹配的组(SO答案),所以(?:_a)匹配_a而不是枚举它,以下问号使其成为可选。

因此,用英语说,匹配.<anything>模式后面(或不)模式的结尾_a

做到这一点的另一种方法是使用 向后看 (见 后面
)。提及这一点是因为它们非常有用,但我在进行RE的15年中并不了解它们



 类似资料:
  • 我正在写一个求解方程求解方法。方法将是递归的;搜索所有外括号,当找到时,重新求解括号内的值,当没有找到括号时返回值。 Regex.Replace(...)替换指定模式的所有匹配项。我希望能够匹配到多个场景,并用不同的输出替换每个场景

  • 问题内容: 我是python的新手 我需要用一个正则表达式匹配所有情况并进行替换。这是一个示例子字符串->所需结果: 我想在我的代码中做到这一点: 而不是替换完之后的所有内容,它替换了所有内容并返回 re.sub是否有办法仅替换捕获组而不是整个模式? 问题答案: 您可以使用替换组: 注意,我将第一组(要保留的组)放在括号中,然后通过在替换字符串中使用修饰符(第一组)将其保留在输出中。

  • 问题内容: 我有一个字符串,其结构类似于:。每次来自外部源的字符串都可能有所不同。 我只想替换第一次出现的而不是其他的。可能吗? 问题答案: preg_replace的可选第四个参数是:

  • null 但问题是我的regex不是。

  • 问题内容: 如何用另一部分替换字符串的特定部分? 输入字符串: 如何用其他方式更改字符串中的全部? 我认为我需要一个循环,但是我不确定如何使用它。 问题答案: 或者更精确地回答您的问题:

  • 我正在寻找创建正则表达式的帮助,以便我可以用锚标签替换文本。文本来自SQL字段(VarChar(max)),格式如下: 在上面的文本中,我需要将1994年以后的所有章节替换为锚标签。例如,98、553、568和300都将被替换。下面的代码查找1994年的整个文本,例如c.98,但是我不确定如何替换该文本中的“98”。