Java中的正则表达式问题

2024-03-12

我正在尝试为以下内容创建一个正则表达式replaceAllJava 中的方法。测试字符串是abXYabcXYZ模式是abc。我想将除图案之外的任何符号替换为+。例如字符串abXYabcXYZ和图案[^(abc)]应该返回++++abc+++,但就我而言,它会返回ab++abc+++.

public static String plusOut(String str, String pattern) {
    pattern= "[^("+pattern+")]" + "".toLowerCase();
    return str.toLowerCase().replaceAll(pattern, "+");
}
public static void main(String[] args) {
    String text = "abXYabcXYZ";
    String pattern = "abc";
    System.out.println(plusOut(text, pattern));
}

当我尝试用以下内容替换模式时+没有问题 -abXYabcXYZ有图案(abc)回报abxy+xyz。图案(^(abc))返回不进行替换的字符串。

还有其他方法可以将 NOT(regex) 或组符号写为单词吗?


使用正则表达式想要实现的目标非常困难,因为无法表达“替换与模式不匹配的字符串”。您必须使用“积极”模式,告诉要匹配什么而不是不匹配什么。

此外,您想替换每个角色带有替换字符,因此您必须确保您的模式与一个字符完全匹配。否则,您将用单个字符替换整个字符串,返回较短的字符串。

对于您的玩具示例,您可以使用负向前查找和向后查找来完成任务,但这对于具有更长或更复杂字符串的实际示例来说可能更困难,因为您必须单独考虑字符串的每个字符,以及它的背景。

这是“not ‘abc’”的模式:

[^abc]|a(?!bc)|(?<!a)b|b(?!c)|(?<!ab)c

它由五个子模式组成,通过“或”连接(|),每个都恰好匹配一个字符:

  • [^abc]匹配除以下字符外的所有字符a, b or c
  • a(?!bc)火柴a如果后面没有bc
  • (?<!a)b火柴b如果前面没有a
  • b(?!c)火柴b如果后面没有c
  • (?<!ab)c火柴c如果前面没有ab

这个想法是匹配目标单词中不存在的每个字符abc,加上根据上下文,不属于单词一部分的每个单词字符。可以使用否定前瞻来检查上下文(?!...)和回顾(?<!...).

您可以想象,一旦您的目标单词多次包含一个字符,这种技术就会失败,例如example。很难表达“匹配”e如果后面没有x and之前没有l”.

特别是对于动态模式,进行积极搜索然后替换第二遍中不匹配的每个字符要容易得多,正如其他人在这里建议的那样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中的正则表达式问题 的相关文章

随机推荐

  • 从 Uri 类型 android 创建文件

    我正在尝试从图库中选择图像 然后将此图像转换为文件并通过 HttpPost 发送 但我总是FileNotFoundException 这是我的代码 选择照片 public void onActivityResult int requestC
  • 如何在 Flutter CustomPainter 中使用贝塞尔曲线绘制形状

    我正在尝试使用 flutter customPainter 库绘制下面的图片 我怎样才能画出这个形状 我的代码和结果 import package flutter material dart class CurvePainter exten
  • Xamarin SOAP Web 服务

    我在 Xamarin 中创建了一个便携式库项目 我想添加 Web 服务 但框架区域已关闭 这是什么原因呢 有没有人遇到过同样的问题 过期网址 111 111 11 11 8013 Services Kurum IdentityMngmnt
  • scala - 激发 Dataframe 的结果集

    我正在查询 mysql 表 val url jdbc mysql XXX XX XXX XX XX compute 1 amazonaws com 3306 pg partner val driver com mysql jdbc Driv
  • AWS DynamoDB 查询不过滤 BOOL 值

    我有一个使用 GUI 创建的用户表 并给出了电子邮件分区键 它是一个字符串 然后我使用 aws lambda 来做一个 putItem 它有 email string email protected cdn cgi l email prot
  • 嵌入模板上的任何指令均未使用属性绑定 ngif

    我正在 Angular Angular2 RC4 中创建一个简单的应用程序 但我发现很难在 Nodejs 中使用实时服务器运行该应用程序 我想帮助您了解如何解决 Chrome 控制台中出现的错误 Chrome 控制台出错 browser a
  • 检查一个数据帧是否是另一个数据帧的重新排序[重复]

    这个问题在这里已经有答案了 我有两个在两个不同场合生成的数据帧 但我怀疑它们是相等的 两者具有相同的行数和列数 从视觉上看它们似乎是相同的 除了行的排序方式不同 两者都没有可以重新排序的 ID 列 我能做的最好的事情就是通过process
  • 使用 RX Java 获取过滤器索引或第一个的优雅方法

    我正在练习 RX Java 想要获取与过滤器匹配的项目在数组中的位置 我看不到任何明显的方法来做到这一点 我正在考虑压缩范围和可迭代可观察之类的东西 但它很快就变得比 for 循环更加冗长和复杂 过去有mapWithIndex and zi
  • 将 Firebase DB 与本地数据库结合使用

    在我的应用程序中我有SQLite db 我想在用户的设备之间引入同步 Firebase DB看起来是一个可以接受的解决方案 但是Firebase DB首先是云数据库 因此 如果用户拒绝身份验证对话框并让他使用应用程序 但没有云同步 我无法将
  • iOS 通过溢出滚动禁用页面滚动:触摸

    假设我们希望通过 添加到主屏幕 使网络应用程序感觉像本机应用程序 第一步是禁用默认滚动 容易 对吧 window or document window addEventListener touchmove function event no
  • 如何选择具有多个类的跨度并将其放置在锚点内?

    我所处的情况是 我需要根据应用于它的类将单击事件绑定到跨度 放置在具有多个类的锚点内 For eg 更新 添加了下面的 html 例如 div class c0 c a class c1 c2 span class c3 c4 span A
  • Supervisor 节点 .js“程序节点应用程序已退出,代码为 0”错误

    当我安装快速脚手架应用程序时 express 然后运行npm安装 npm install 然后运行主管 supervisor app I get Starting child process with node app Program no
  • 从数据库模式创建 Web 表单

    我想知道是否有任何应用程序 最好是免费软件 可以进行数据库配置 并且尽可能轻松地创建用于轻松插入数据的 Web 表单 我发现很难准确表达我所追求的是什么 也许我可以谈谈我需要什么 我有一个配置数据库 至少通常包含有关我们系统中服务器的 真相
  • 如何在 jQuery 中解析 JSON 数组?

    EDIT我检查了 jQuery 文档 并使用 ajax 和指定的 json 数据类型返回一个评估的 javascript 对象 因此 eval 不是这里的答案 无论如何 我知道这一点 因为我能够解析单个 JSON 对象 但不能解析数组 问题
  • Capybara 问题:@request 必须是 ActionDispatch::Request

    我在让 Capybara 与 Rails 一起使用时遇到问题 只是测试那个所谓有趣的测试东西 好的 在所附的代码中有几个等效的测试 第一个是用Rails 自带的shoulda context Test Unit 制作的 第二个测试也是使用水
  • bitbucket - 无法确定主机“bitbucket.org”的真实性

    我在尝试推送到我的 bitbucket 存储库时遇到了这个问题 不确定为什么指纹不匹配 It asks me if I want to continue but I can t type anything in the dialog aft
  • 未为类型“DBNull”和类型“Integer”定义运算符“=”

    过去几个小时我一直在挣扎 但仍然无法解决这个问题 我遇到的问题是 当有人被承认数据库更新给他们 BedID 时 当我尝试释放他们时 我似乎无法将 BedID 在数据库中 设置为 Nothing 这是一个问题 因为我需要能够接纳和解雇尽可能多
  • 将 csv 数据集导入到 R 但值变成因子

    我对 R 非常陌生 在访问我导入的数据集时遇到问题 我正在使用 RStudio 并在导入 csv 文件时使用导入数据集功能 并将该行从控制台窗口粘贴到源窗口 代码如下 setwd c kalle R stuckey lt read csv
  • 未调用 DOMContentLoaded 或加载事件处理程序的异步加载脚本?

    我有一个脚本DOMContentLoaded事件处理程序 document addEventListener DOMContentLoaded function console log Hi 我正在异步加载 然而 事件处理程序从未被调用过
  • Java中的正则表达式问题

    我正在尝试为以下内容创建一个正则表达式replaceAllJava 中的方法 测试字符串是abXYabcXYZ模式是abc 我想将除图案之外的任何符号替换为 例如字符串abXYabcXYZ和图案 abc 应该返回 abc 但就我而言 它会返