正则表达式匹配字符串的可选结尾

2024-02-18

鉴于以下情况:

"John Smith"
"John Smith (123)"
"John Smith (123) (456)"

我想捕捉:

"John Smith"
"John Smith", "123"
"John Smith (123)", "456"

什么样的 Java 正则表达式可以让我做到这一点?

我试过了(.+)\s\((\d+)\)$它适用于“John Smith (123)”和“John Smith (123) (456)”,但不适用于“John Smith”。如何更改正则表达式以适用于第一个输入?


你可以转第一个.+懒惰,并用非捕获可选组包装后面的部分:

(.+?)(?:\s\((\d+)\))?$
   ^ ^^^           ^^ 

See the 正则表达式演示 https://regex101.com/r/hI0eS1/1

实际上,如果您使用正则表达式String#matches()最后$是多余的。

Details:

  • (.+?)- 第 1 组捕获除换行符之外的一个或零个字符,尽可能少(因此,允许后续子模式“落入”一个组中)
  • (?:\s\((\d+)\))?- 可选的空白序列,(,第 2 组捕获 1+ 位数字和)
  • $- 绳锚的末端。

A Java演示 http://ideone.com/2mXjTZ:

String[] lst = new String[] {"John Smith","John Smith (123)","John Smith (123) (456)"};
Pattern p = Pattern.compile("(.+?)(?:\\s\\((\\d+)\\))?");
for (String s: lst) {
    Matcher m = p.matcher(s);
    if (m.matches()) {
        System.out.println(m.group(1));
        if (m.group(2) != null)
            System.out.println(m.group(2));
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正则表达式匹配字符串的可选结尾 的相关文章

  • 如何迭代所有注册表项?

    我正在尝试迭代所有注册表项以查找 包含 并删除 jre1 5 0 14 值 有办法做到吗 下面的代码只是在特定键下找到jre1 5 0 14 我确实想迭代所有的键 顺便说一句 if 子句获取是否等于 jre1 5 0 14 但如果它包含 j
  • 如何在Java 8中实现Elvis运算符?

    我有一个经典的 Elvis 运算符 案例 其中我调用每个可能返回 null 的方法并将它们链接在一起 thing nullableMethod1 a nullableMethod2 b nullableMethod3 在 Java 8 中
  • 线程“main”java.lang.UnsatisfiedLinkError中出现异常:java.library.path中没有opencv_java249

    我目前正在尝试在我的 32 位笔记本电脑上设置 OpenCV 但我不断收到一条令我困惑的错误消息 Exception in thread main java lang UnsatisfiedLinkError no opencv java2
  • 正则表达式中的“g”标志是什么意思?

    的含义是什么g正则表达式中的标志 之间有什么区别 g and g用于全局搜索 这意味着它将匹配所有出现的情况 通常你还会看到i这意味着忽略大小写 参考 全局 JavaScript MDN https developer mozilla or
  • @OneToMany 与 @JoinTable 错误

    我试图理解 OneToMany with JoinTable 对于这样的场景 我正在使用 JPA 2 1 Hibernate 5 0 4 和 Oracle 11 XE 当我打电话时userDao save user 下面的代码 我有 jav
  • 如何识别 Java 中的不可变对象

    在我的代码中 我正在创建一个对象集合 这些对象将由各种线程以只有在对象不可变的情况下才安全的方式访问 当尝试将新对象插入到我的集合中时 我想测试它是否是不可变的 如果不是 我将抛出异常 我能做的一件事是检查一些众所周知的不可变类型 priv
  • 要打乱的键值(整数、字符串)列表的最佳结构

    我需要在 Java 中实现一个结构 它是一个键值列表 类型为整数 字符串 并且我想对其进行洗牌 基本上 我想做类似的事情 public LinkedHashMap
  • 正则表达式:匹配未包含在 [] 中的空格

    例如 对于这个字符串 div img wrapper img title Hello world 我想匹配第一个空格 但不匹配第二个空格 包含在 中 正则表达式是什么 以下表达式将通过使用前瞻断言来完成这项工作 gt 下划线代表空格 该表达
  • 是否可以从另一个方法传递 args[] 来调用 main 方法?

    我试图从另一个传递参数的方法调用类的主要方法 就像从命令行运行该类时一样 有没有办法做到这一点 您可以致电main方法就像您调用任何其他 静态 方法一样 MyClass main new String arg1 arg2 arg3 Exam
  • 如何在 Struts 2 OGNL 中将参数传递给方法调用

    我想使用属性作为对象方法的参数
  • 用 java 编写解释器时的 switch 或 if 语句

    当前的作业需要我编写一个程序 以一种非常微小且基本的编程语言 行为有点像 FORTRAN 来读取包含指令的文件并执行这些指令 基本上它是我猜的语言的简单解释器 它是完全线性的 所有语句都是按顺序定义的 并且只有字符串和整数变量 我需要查找和
  • 如何制作无限的jscrollpane?

    我之前已经实现过拖动滚动 但是创建无限滚动窗格的最佳方法是什么 当然不会有任何滚动条 我将实现拖动滚动 我想做的是在无限表面上实现动态加载 EDIT 当然 它实际上不会是无限的 我想问如何伪造它 您可以执行以下操作 AdjustmentCl
  • 不要模拟值对象:过于通用的规则,没有解释

    以下是 Mockito 单元测试框架的引用 不要模拟值对象 为什么有人会想要这样做呢 因为实例化对象太痛苦了 gt 无效 原因 如果创造新的装置太困难 那就是一个迹象 代码可能需要一些认真的重构 另一种方法是创建 价值对象的构建者 有一些工
  • 如何通过子 POJO 的属性过滤复合 ManyToMany POJO?

    我有两个像这样的房间实体 Entity public class Teacher implements Serializable PrimaryKey autoGenerate true public int id ColumnInfo n
  • HTTP PUT 在 Java 中上传文件

    Edit 我想我已经弄清楚如何执行二进制数据部分 仔细检查代码 但我很确定我做对了 现在 当我尝试按照中所述完成上传时遇到新错误Vimeo API 文档 http vimeo com api docs upload streaming Ed
  • Google Place Api:来自此 Android 客户端应用程序 com.package.name 的请求被阻止

    我在用PlaceAutocompleteFragment当我单击搜索字段 PlaceAutocompleteFragment 对话框消失时 我收到此错误 errors domain global re ason forbidden mess
  • 读/写带有特殊字符的.txt文件

    I open Notepad Windows 并写 Some lines with special characters Special 并前往另存为 someFile txt 与Encoding set to UTF 8 在Java中我有
  • Selenium - 等待网络流量

    我们将 Selenium 与 Java API 和一些 Javascript 用户扩展一起使用 我们在应用程序中使用了大量 AJAX 调用 我们的许多测试随机失败 因为有时 AJAX 调用完成得比其他时候慢 因此页面未完全加载 我们通过等待
  • H2 - (相当)长的 INSERT 失败,错误 42000

    H2 内存中 插入 错误 42000 尝试过版本 1 4 196 1 4 197 1 4 199 我还尝试在 H2 服务器 本地 上执行 INSERT 也失败 给出错误的行 抱歉 但出于安全原因 我无法生成更多 INSERT INTO tb
  • 如何使用剪辑来减少绘画时间?

    我正在尝试使用 Clip 来减少 CPU 负载 但剪辑在屏幕上留下了一些我似乎无法摆脱的垃圾 另外 打开和关闭剪辑似乎对 CPU 负载没有影响 在任一情况下 大部分时间似乎都花在重绘管理器和绘制缓冲图像上 import static jav

随机推荐

  • 无法使用 WAMP 访问 localhost 或 phpMyAdmin

    我正在运行 Apache v2 2 21 PHP v5 38 和 MySQL v5 5 16 WAMP 图标为绿色 正如帖子标题所述 我无法从 WAMP 系统托盘图标菜单访问 localhost 或 phpMyAdmin 也无法通过键入ht
  • 如何给透明的UIView添加阴影?

    我怎样才能重现这种阴影 我的问题是 如果我使用高 alpha 颜色或clearColor 则没有投影 如果我使用低 alpha 颜色 则看不到板下的投影 随着音量的变化 彩色部分 阴影也在移动 所以它不是纯粹的 Photoshop 尝试使用
  • 以编程方式为 Jetty 9 嵌入式配置 SSL

    我正在使用 jetty 版本 9 0 0 M4 并尝试将其配置为接受 SSL 连接 按照以下说明进行操作 http www eclipse org jetty documentation current configuring connec
  • 使用 apache commons 配置 XMLConfiguration 格式化 XML 输出

    我正在使用 apache commons 配置 XMLConfiguration 来构建和保存 XML 文件 保存的时候没有格式化 我得到类似的东西
  • Scapy发送的数据包收不到

    我正在尝试使用以下命令使用 scapy 发送 UDP 数据包 gt gt send IP dst 127 0 0 1 src 111 111 111 111 UDP dport 5005 Hello Sent 1 packets 并从tcp
  • Django Queryset:在过滤之前在 SQL 中转换 VARCHAR 字段

    我有一个我无法控制的表 但需要从中进行选择 字段 building 是一个 varchar 并且在我的 非托管 django 模型中也是这样定义的 但从该表中进行选择时 应将其视为整数 有 000100 之类的值 甚至末尾有空格 我需要一个
  • boost 属性树 put/get DBL_MAX

    我正在编写一个 ptree 在某些时候我需要放入 DBL MAX 作为默认值 当我打开生成的 xml 文件时 我看到了正确的数字 但是当我使用 ptree get 获取数字时 会引发异常 conversion of data to type
  • php imagick,如何使区域透明

    我想使 Imagick 对象内的一个区域透明 具有特定的宽度 高度和顶部位置 例如 我需要一个从第 15 像素到顶部 30 像素 x 30 像素的透明区域 但我找不到方法来实现 canvas1 new Imagick canvas1 gt
  • 如何检查内核中SMP是否启用或禁用?

    我想知道如何检查我正在运行的机器 内核是否配置为 SMP 当然 我可以查看内核 config文件并可以搜索它 但是 问题是假设我没有源代码 我将如何检查 SMP 配置 有没有proc文件来检查吗 下面说我没有多核 cat proc cpui
  • MPI_Send 和 MPI_Recv 的行为

    为什么要写这几行代码 if my rank 0 sprintf msg Hello from d of d my rank comm sz if my rank 2 sleep 2 sprintf msg Hello from d of d
  • 如何使用 Win2D 模拟 DeviceLost 事件?

    我有一个CanvasControl在 UWP 应用程序中 我注意到当我将 Surface 单独放置一段时间并且它会自动进入睡眠状态时 CanvasControl恢复后不再起作用 之前绘制的位图现在是空白的 我尝试在 Visual Studi
  • 失败后自动重新部署

    我使用 VSTS 在每次提交到特定分支后自动发布我的应用程序 任务基本上是 重新创建数据库 如果第一个没问题 gt 部署 API 和 Web 如果第二个没问题 gt 部署并重新启动一些 Windows 服务 在第二步中 有时会由于某些连接或
  • Couchbase 文档 ID 生成

    我有一个与 couchbase 6 0 集成的 Springboot 应用程序 我读过 如果一个键用 Id 注释 那么它将保存为文档 ID 并且不会成为 json 的一部分 然后我在键上一起使用了 Id和 Field 但该字段仍然没有出现在
  • 如何在 Jupyter / IPython 中覆盖之前的打印行

    我完全清楚print Blah end r 但这在 Jupyter IPython 笔记本中不起作用 因为它在终端中通常不打印任何内容 或者如果操作非常快 则会触发异常 难道这就是不可能吗 谢谢 None
  • 单独读取数据 fscanf

    我正在尝试从文件中读取数字 该文件具有以下格式 2 4 5 7 3 2 4 7 我尝试使用fscanf收集直到换行符的所有数字并将数字存储在数组中 与第二行相同 但直接从第二行开始不会再次开始并将其存储在另一个数组中 是否可以使用以下方法来
  • 如何修复错误:此类与键 tableView 的键值编码不兼容。 [复制]

    这个问题在这里已经有答案了 我做了一个应用程序Table View and Segmented Control 这是我第一次 我正在使用一些代码和一些教程 但它不起作用 当我运行我的应用程序时 它崩溃了 并在日志中显示此错误 MyAppli
  • 在 shell/bash 中的两个命令之间连接输入和输出

    我有两个 UNIX 程序 A 和 B 它们从 stdin stdout 读取和写入 我的第一个问题是如何将 A 的 stdout 连接到 B 的 stdinandB 的标准输出到 A 的标准输入 即 类似 A B而是双向管道 我怀疑我可以通
  • 为什么我的库无法在 CocoaPods 网站上扩展?

    我正在尝试通过 CocoaPods 网站访问我的图书馆信息 但无法访问 所有其他库似乎都能够扩展 我的是 MKWeatherUndergroundKit 这是我的 podspec Pod Spec new do s s name MKWea
  • Ember.js 中的路由采用什么样的单元测试解决方案? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在寻找在 Ember js 应用程序中对路由进行单元测试的最佳解决方案 我找到了两种解决方案 我希望你告诉我什么是最适合你的 这两个实现可以
  • 正则表达式匹配字符串的可选结尾

    鉴于以下情况 John Smith John Smith 123 John Smith 123 456 我想捕捉 John Smith John Smith 123 John Smith 123 456 什么样的 Java 正则表达式可以让