java中连续重复字符的替换

2023-12-29

我正在研究 Twitter 数据标准化。 Twitter 用户经常使用“ts I looooooove it”之类的术语来强调“爱”这个词。我想通过替换重复字符来将这些重复的字符转换为正确的英语单词,直到我得到一个正确的有意义的单词(我知道我无法通过这种机制区分善和神)。

我的策略是

  1. 识别此类重复字符串的存在。我会寻找超过 2 个相同的字符,因为可能没有英语单词具有超过两个重复字符。

    String[] strings = { "stoooooopppppppppppppppppp","looooooove", "good","OK", "boolean", "mee", "claaap" };
    
    String regex = "([a-z])\\1{2,}";
    Pattern pattern = Pattern.compile(regex);
    
    for (String string : strings) {
         Matcher matcher = pattern.matcher(string);
         if (matcher.find()) {
             System.out.println(string+" TRUE ");
         }
    }
    
  2. 在 Wordnet 等词典中搜索这样的词

  3. 替换除两个这样的重复字符之外的所有字符并检查 Lexicon
  4. 如果词典中没有,请再删除一个重复字符(否则将其视为拼写错误)。

由于我的 Java 知识很差,我无法管理 3 和 4。问题是我无法替换除两个重复的连续字符之外的所有字符。 以下代码片段替换除一个重复字符之外的所有字符System.out.println(data.replaceAll("([a-zA-Z])\\1{2,}", "$1"));

需要帮助才能查明 A. 如何替换除 2 个连续重复字符之外的所有字符 B. 如何从 A 的输出中多删除一个连续字符 [我认为B可以通过以下代码片段来管理]

System.out.println(data.replaceAll("([a-zA-Z])\\1{1,}", "$1"));

编辑:Wiktor Stribiżew 提供的解决方案在 Java 中完美运行。我想知道需要进行哪些更改才能在 python 中获得相同的结果。 Python 使用 re.sub。


你的正则表达式([a-z])\\1{2,}匹配 ASCII 字母并将其捕获到组 1 中,然后匹配该值的 2 次或多次出现。因此,您需要用反向引用替换所有内容,$1,保存捕获的值。如果您使用一个$1, the aaaaa将被替换为单个a如果你使用$1$1,它将被替换为aa.

String twoConsecutivesOnly = data.replaceAll(regex, "$1$1");
String noTwoConsecutives = data.replaceAll(regex, "$1");

See the Java演示 http://ideone.com/xt8g72.

如果您需要使正则表达式不区分大小写,请使用"(?i)([a-z])\\1{2,}"甚至"(\\p{Alpha})\\1{2,}"。如果必须处理任何 Unicode 字母,请使用"(\\p{L})\\1{2,}".

BONUS:在一般情况下,要替换任意数量的任何重复的连续字符,请使用

text = text.replaceAll("(?s)(.)\\1+", "$1");   // any chars
text = text.replaceAll("(.)\\1+", "$1");       // any chars but line breaks
text = text.replaceAll("(\\p{L})\\1+", "$1");  // any letters
text = text.replaceAll("(\\w)\\1+", "$1");     // any ASCII alnum + _ chars
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java中连续重复字符的替换 的相关文章

随机推荐

  • 如何保持元素不刷新

    主要目标是保持徽标文本不刷新 div class small 7 medium 4 columns logo 和菜单 div
  • laravel - 刀片模板布局结构为每 4 个跨度添加行流体

    我有这个刀片模板 div class row fluid foreach courses as course div class span3 learn Content div endforeach Output div class row
  • 使用 SheetJS 设置日期格式

    预先感谢您百忙之中看一下这个问题 我正在尝试使用 SheetJS 读取 xlsx 文件 但在处理通过 Excel 格式化为自定义 yyyy mm dd hh mm ss 的日期列时遇到一些问题 所有这些日期都显示为大浮点值 以下是在上传时读
  • 从已发布的 Google 文档电子表格中删除页眉和页脚 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我找到了用于删除 Google 文档电子表格上的网格线的 JavaScript 解决方案 使用 下载为 HTML 然后在网址栏中使用 Ja
  • 如何获取具有不同命名空间的元素

    我希望获取下面 xml 的元素名称 我的请求中的问题是我想获取有效负载元素 为此我使用了这个表达 name env Payload 所以我得到这个结果环境 有效负载
  • PyInstaller 隐藏导入

    我有一个完全运行的 Python 程序 它使用以下导入 import json import requests from natsort import natsorted 但是 当我尝试使用 PyInstaller 将其编译为可执行文件时
  • 有没有办法在 Travis CI 中访问和查看 html 报告以进行 Maven 测试?

    有没有办法在 Travis CI 中访问和查看 html 报告以进行 Maven testng 测试 目前 Travis CI 日志是我查看通过 失败 跳过的测试数量等的唯一方法 像这样的事情 测试运行 34 失败 0 错误 0 跳过 0
  • QMake:使用相对路径引用库

    我有一个使用 SQLite 的 Qt 项目 所以我有以下目录结构 C Workspace MyProject MyProject pro C Workspace MyProject sqlite3 sqlite3 lib 添加带有绝对路径的
  • 隐藏 asp.net WebMethod 返回的异常的堆栈跟踪?

    我在我的 aspx 页面中使用带有属性 WebMethod 的方法 我不使用任何 asp net ajax 而是使用 jQuery 来调用这些方法并返回 JSON 中的对象 这一切都很好 接下来 我在 webMethod 内添加了授权检查
  • 随机大小的网格的纹理重复

    我需要一些关于 Three js 中纹理的帮助 我有多个块 每个块都有随机的宽度 高度 我需要对它们应用相同的纹理 但沿整个块重复 正如我从另一个答案中看到的 我可以使用以下代码设置纹理重复 lavaTexture wrapS lavaTe
  • 表单提交后标题位置未重定向

    您好 我的表单在提交后没有重定向到我的成功页面 该消息确实通过了 我确实收到了测试电子邮件 但是 我的表单在发送电子邮件后不会重定向 我正在使用标头位置来重定向 谁能帮我这个 require once class phpmailer php
  • 何时使用存储过程而不是使用任何带有编程逻辑的 ORM?

    大家好 我想知道什么时候我应该更喜欢编写存储过程而不是编写编程逻辑和使用 ORM 或其他东西提取数据 存储过程在服务器端执行 这意味着处理大量数据不需要通过网络连接传递这些数据 此外 通过存储过程 您可以构建一致的复杂业务逻辑 比如说 您每
  • 以编程方式发布表单并没有执行我的浏览器正在执行的操作。为什么?

    我正在尝试以编程方式在不属于我的网站上提交表单 我正在尝试模拟使用网络浏览器手动执行的操作 我正在使用 HTTP 库发出 HTTP POST 请求 由于我不知道 当我以编程方式提交表单时 与在网络浏览器中手动提交相比 我得到了不同的结果 错
  • 将 COMP-3 压缩十进制字段解释为数值

    我正在创建一个 SSIS 包来从一系列抄写本文件中读取解压数据 我不确定以下字段定义的正确解释 希望有人知道 FIELD NAME 1 PIC S9 15 V9 3 COMP 3 FIELD NAME 2 PIC S9 3 V9 8 COM
  • 在rails中,如何确定记录是否被依赖的: :destroy 回调销毁?

    我的 Rails 应用程序中有一条记录after destroy需要知道记录被破坏的原因的钩子 更具体地说 如果该记录由于其父记录而被级联销毁dependent destroy 它需要采取与单独销毁记录不同的方式 我想做的是看看它的父母是否
  • SQL选择连接帮助

    我在找出针对此场景的查询时遇到问题 我想在这个查询中使用两个表 它们是这样的 Units ID Other Data People ID UnitID lt fk to Units Other Data 这就是我想做的 我想选择人员表中没有
  • 构建 Qt 应用程序时出现“/usr/bin/ld: 找不到 -lGL”

    我昨天安装了 Linux Debian 然后安装了最新的 Qt 版本 今天我安装了gcc和g 但问题是 当我创建 GUI 应用程序时它不会构建和运行 每当我创建一个新项目时 选择 gui 甚至不更改任何未编译的内容 我会收到以下消息 usr
  • 将静态库链接到共享对象时,__attribute__((used)) 无效(android gcc 4.8)

    我正在将一些东西移植到 Android 并且我有几个应该链接到 so 文件中的静态库 使用 Android NDK 我尝试使用 Wl whole archive到链接器 并由适当的终止 Wl no whole archive 但出现错误 例
  • 如何通过维护其他配置在现有 Eclipse 中设置 Struts 2?

    我是一个新手程序员 正在使用阿帕奇Struts 2 http struts apache org MVC 框架 我想在现有的 Eclipse IDE 中设置 Struts 2 并且不想损害我在 Eclipse 中所做的其他不同工作 以下是我
  • java中连续重复字符的替换

    我正在研究 Twitter 数据标准化 Twitter 用户经常使用 ts I looooooove it 之类的术语来强调 爱 这个词 我想通过替换重复字符来将这些重复的字符转换为正确的英语单词 直到我得到一个正确的有意义的单词 我知道我