java - 正则表达式匹配非匹配组
问题描述
我想匹配全名中的一些名称,即名称+某些信息,例如发布年份或作者。我想在全名中获取实名。
[author1] Shuu [Digital]
[author1] Paradise ~★ Special Edition
(magazin) [kulmov_ (Kurowa)] Channel (Fate/Grand Order) [Chinese] [*'N]
(COMIC1☆7) [ComicCon] X-Men!! (Marvel)
(magazin) [Rave (Jacky)] SPLASH 11 (Microsoft)
[anotherauthor] name1 | name2 (Hatsujou Complex) [English]
[author7 (aurhot234)] Connect (Project) [Digital]
[author3] ~Hellverse~ (COMICcon 2017)
[author4] Escape [English] [Decensored]
我发现这个名字几乎总是在“]”或“)”之后。然后是一个空格,然后是名称。名称后面是一个空格,或者什么都没有或“(”或“[”。名称可以包含一些非 ASCII ?符号。全名可以包含日本符号。
我已经找到:
]\s+(.+)+\s*[\(|\[|\s]*
我不知道为什么,但它确实与“]”匹配,直到字符串的最后,包括空格。但正如我所见,它应该只匹配“]”之后的所有内容,获取真实名称,然后在找到“(”或“[”后停止。
我该如何解决?
解决方案
我不知道为什么,但它确实与“]”匹配,直到字符串的最后,包括空格。但正如我所见,它应该只匹配“]”之后的所有内容,获取真实名称,然后在找到“(”或“[”后停止。
如果您希望它在看到 a(
或时停止[
,但不一定有一个或可能不止一个,那么您需要对匹配的内容更加挑剔。.+
将匹配任何字符序列(并且第二个+
in(.+)+
是多余的),并且可以包括(
和[
字符。这样的事情会更好:
]\s+([^[(]+)
在那里,捕获组不能包含任何[
或(
字符,因此如果有任何字符,则匹配必然会在之前停止。
推荐阅读
- matlab - 如何调用 M 文件到 Simulink 模型?
- javascript - 为什么 WebGL 可用的扩展会有所不同?
- python - 多个 GPU 上的 TensorFlow
- reactjs - 将环境变量从服务器传递到您的 Create-React-App
- rest - 关于迁移到 Linkedin API 2.0 版本的问题
- python - 如何使用 range(len(list)) 查找列表中所有偶数索引整数的乘积?
- javascript - 获取从另一个函数创建的 css 属性值的正确方法
- java - maven pom:application.main.class 和 exec.main.class 之间的区别
- excel - Excel VBA 参考变量工作表名称
- xml - 去 1.11.2 xml 意外的 EOF