【问题标题】:Regex to replace duplicate characters正则表达式替换重复字符
【发布时间】:2015-02-04 12:03:55
【问题描述】:

我有一个全文搜索,我只需要一个连接字符,但有时我会收到多个。

例如 为了搜索Java Objects,客户端将空格替换为+,因此服务器搜索Server+Objects。这一切都很好,但有时用户会输入Java Objects,这将作为Java+++Objects 到达服务器,我的全文搜索失败。

我需要用一个+ 替换所有出现的+++,记住我可能会收到类似Java+++Objects++With+Names+like++++Abstract 的查询。

我可以编写一些代码来去除它们,但我知道做一个正则表达式会更干净,但我没有花太多时间学习它们。

【问题讨论】:

  • 应该替换哪些字符?我假设这不包括字母和数字。
  • 如果Java ObjectsJava%20%20%20Objects 的身份到达服务器怎么办?
  • 这只是需要替换的 + 字符,因为客户端用 + 替换任何空格,但它是用户输入的值。全文搜索只是一个 postgresql 全文搜索,其中 + 用作单词分隔符。所以 Java%20%20%20Objects 将只是一个单词。
  • 我的答案也适用于“%20”之类的多个实例。

标签: regex


【解决方案1】:

这是一个替换所有重复字符的示例(您没有指定语言,因此我在示例中使用 perl s// 运算符):

s/(.)\1+/\1/g;

“。”在这个模式中是你正在寻找的。例如,如果您只想替换重复的非空白字符,请使用:

s/(\W)\1+/\1/g;

参见https://www.regex101.com/r/oL2mW5/1的示例

【讨论】:

    【解决方案2】:

    您需要使用此模式:\+{2,} 搜索 2 个或更多 + 符号。并用+ 替换所有出现的情况。 https://regex101.com/r/rG7pL2/2

    【讨论】:

    • \+\++ 混淆一年后阅读正则表达式的人;-)
    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    相关资源
    最近更新 更多