繁体   English   中英

正则表达式用字符串之间的给定匹配替换字符

[英]Regular expression replace characters by a given match between strings

我正在尝试用正则表达式匹配替换给定的字符。 例如,给定以下字符串:
如果你看看你在生活中拥有什么,你总会拥有更多。 如果你看看你生活中没有的东西,你永远不会有足够的
我想用“。”替换所有“t”。 仅在字符 'ok' 和 'fe' 之间匹配。

我用这个正则表达式得到了 'ok' 和 'fe' 之间的匹配:

(?<=ok).*?(?=fe)

而且我只能将一个字符与以下正则表达式匹配:

(?<=ok).*?(t).*?(?=fe)

我尝试通过以下方式转换该正则表达式,但它不起作用:

(?<=ok).*?((t).*?)*?(?=fe)

如何匹配“ok”和“fe”之间的所有“t”? https://regex101.com/r/ORgseA/1

您可以使用

String result = text.replaceAll("(?s)(\\G(?!\\A)|ok)((?:(?!ok|fe|t).)*)t(?=(?:(?!ok|fe).)*fe)", "$1$2!");

请参阅正则表达式演示Java 演示

String text = "If you look at what you have in life, you'll always have more. If you look at what you don't have in life, you'll never have enough";
String result = text.replaceAll("(?s)(\\G(?!\\A)|ok)((?:(?!ok|fe|t).)*)t(?=(?:(?!ok|fe).)*fe)", "$1$2!");
System.out.println(result);
// => If you look a! wha! you have in life, you'll always have more. If you look a! wha! you don'! have in life, you'll never have enough

详情

  • (?s) - Pattern.DOTALL嵌入标志选项(使.匹配换行符)
  • (\G(?!\A)|ok) - 第 1 组 ( $1 ): ok或上一场成功比赛的结束
  • ((?:(?.ok|fe|t).)*) - 第 2 组 ( $2 ): 任何一个字符,零次或多次出现,尽可能多,不启动okfet字符序列
  • t - 一个t字符
  • (?=(?:(?.ok|fe).)*fe) - 紧靠右边,必须有任何单个字符,零次或多次出现,尽可能多,不开始okfe字符序列然后是一个fe substring。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM