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

使用正则表达式的codingBat repeatEnd

芮瑾瑜
2023-03-14
问题内容

我试图尽我所能来了解正则表达式,所以我想出了基于此基于正则表达式的解决方案编码bat.comrepeatEnd

给定一个字符串和一个整数N,返回一个由字符串的最后N个字符的N个重复组成的字符串。您可以假设N在0到字符串的长度之间(包括端值)。

public String repeatEnd(String str, int N) {
  return str.replaceAll(
    ".(?!.{N})(?=.*(?<=(.{N})))|."
      .replace("N", Integer.toString(N)),
    "$1"
  );
}

部分说明:

  • .(?!.{N}):通过确保后面没有N个字符,断言匹配的字符是最后N个字符之一。
  • (?=.*(?<=(.{N}))):在这种情况下,请使用lookforward首先一直到达字符串的末尾,然后使用嵌套式lookback在后面捕获N个字符\1。请注意,此断言将始终为真。

  • |.:如果第一个断言失败(即前面至少有N个字符),则仍然匹配该字符;\1将是空的。

  • 无论哪种情况,字符总是匹配的。替换为\1

我的问题是:

  • 嵌套断言的这种技术有效吗?(即在前瞻期间向后看?)
  • 有没有更简单的基于正则表达式的解决方案?

奖金问题

repeatBegin(按类似定义)。

老实说,我对此有麻烦!


问题答案:

好一个!尽管我会重构该正则表达式以避免不必要地使用否定逻辑,但我没有找到一种显着改进该正则表达式的方法:

".(?=.{N})|.(?=.*(?<=(.{N})))"

这样,直到输入最后 N个 字符时,才输入第二种替代方法,我认为这使意图更清晰了。

我从未见过参考文献说可以嵌套环顾四周,但是像Bart一样,我也不知道为什么不这样做。有时,我会在lookbehinds内部使用先行方式来绕过可变长度lookbehind表达式的限制。

编辑: 我刚刚意识到我可以通过将替换放在lookahead中来简化正则表达式:

".(?=.{N}|.*(?<=(.{N})))"

顺便说一句,您是否考虑过使用format()而不是构建正则表达式replace()

return str.replaceAll(
  String.format(".(?=.{%1$d}|.*(?<=(.{%1$d})))", N),
  "$1"
);


 类似资料:
  • 行动时刻 - 使用正则表达式 Unlang允许在条件检查中进行正则表达式计算。这些通常是Posix正则表达式。运算符=〜和!〜与正则表达式相关联。为了简单的概念证明,我们将修改上一个练习: 1.编辑FreeRADIUS配置目录下的sites-available / default虚拟服务器,并在该部分顶部的post-auth部分中添加以下内容: if(request:Framed-Protocol

  • 昨天,我需要向正则表达式添加一个文件路径,创建一个如下所示的模式: 一开始正则表达式不匹配,因为包含几个正则表达式特定的符号,如 或 。作为快速修复,我将它们替换为 和 . 与 . 然而,我问自己,是否没有一种更可靠或更好的方法来清除正则表达式特定符号中的字符串。 Python 标准库中是否支持此类功能? 如果没有,您是否知道一个正则表达式来识别所有正则表达式并通过替代品清理它们?

  • sorter: "${$(...props)=>{timeSort(createTime)}$}$", ..$}$"."${$.. 希望结果 :sorter: (...props)=>{timeSort(createTime)}, ..$}$"."${$.. 规则: "${$ 和 $}$" 是一对,将他们替换为空。

  • 本文向大家介绍Java正则表达式使用,包括了Java正则表达式使用的使用技巧和注意事项,需要的朋友参考一下 一:抓取网页中的Email地址 利用正则表达式匹配网页中的文本 将网页内容分割提取 打印结果: 867124664@qq.com 260678675@QQ.com 806208721@qq.com hr_1985@163.com 32575987@qq.com qingchen0501@12

  • 使用正则表达式 现在我们已经看了一些简单的正则表达式,那么我们实际在 Python 中是如何使用它们的呢? re 模块提供了一个正则表达式引擎的接口,可以让你将 REs 编译成对象并用它们来进行匹配。

  • 有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。