Regex 正则表达式将字符串中的所有内容(字符串的一部分除外)捕获到组中
我正在尝试创建一个正则表达式,它将捕获字符串中的所有内容,除了字符串的特定部分。最好的出发点似乎是使用小组 例如,我想从字符串中捕获除“production”和“public”之外的所有内容。 样本输入: 加州公共本地卡制作 内华达州公共生产 将产生输出 加州本地卡 内华达州 在上,我可以提取不需要的字符串Regex 正则表达式将字符串中的所有内容(字符串的一部分除外)捕获到组中,regex,regex-group,Regex,Regex Group,我正在尝试创建一个正则表达式,它将捕获字符串中的所有内容,除了字符串的特定部分。最好的出发点似乎是使用小组 例如,我想从字符串中捕获除“production”和“public”之外的所有内容。 样本输入: 加州公共本地卡制作 内华达州公共生产 将产生输出 加州本地卡 内华达州 在上,我可以提取不需要的字符串 (production|public)\g 但是如何取而代之地捕捉我想要的东西呢? 以下内容将让我了解生产和公众之间的关系,但不是在之前或之后的任何事情: 翻转它并转到\s\s实际上可以在
(production|public)\g
但是如何取而代之地捕捉我想要的东西呢?
以下内容将让我了解生产和公众之间的关系,但不是在之前或之后的任何事情:
翻转它并转到\s\s实际上可以在两个单独的子组(两个匹配中的组2)中提供所需的内容:
但如何将结果结合起来呢?理想情况下,我希望将它们提取为一个单独的命名组,这就是我得到的:
([\s\s]*?)(生产|公共))(?P
这在正则表达式中似乎是不可能解决的。正则表达式匹配始终是样本字符串的连续范围。因此,答案是“否,您不能编写与问题中所述的一系列串联子字符串匹配的正则表达式”
但是,通过用空字符串替换不必要的单词,这种流行的任务很容易解决
s/-production|production-|-public|public-//g
(或您正在使用的语言中的等效语言)
注意。如果支持\b
,则将其拼写为
s/-production\b |\b production-|-public\b |\b public-//g
(为了避免与“subproduction”或“publication”等词相匹配),您的正则表达式就快到了:
([\s\S]*?)(?>production|public)
但这会导致多个匹配
Match 1
Full match 0-17 `california-public`
Group 1. 0-11 `california-`
Match 2
Full match 17-39 `-local-card-production`
Group 1. 17-29 `-local-card-`
因此,您必须多次匹配才能检索结果。您的语言/环境是什么?您可以拆分/应用/组合。我认为不清楚您想要获得什么,您正在使用的特定工具以及不允许执行的操作。
s/-production|production-|-public|public-//g
([\s\S]*?)(?>production|public)
Match 1
Full match 0-17 `california-public`
Group 1. 0-11 `california-`
Match 2
Full match 17-39 `-local-card-production`
Group 1. 17-29 `-local-card-`