匹配任何在[重复]之前没有特定单词的点
Posted
技术标签:
【中文标题】匹配任何在[重复]之前没有特定单词的点【英文标题】:Match any dot that doesn't have a certain word before [duplicate] 【发布时间】:2020-06-26 07:20:51 【问题描述】:我有一个字符串,其模式类似于以下:
TITLE.wordX. aaa.: AAAAAAA;AAAAA. BBBB: bbbb.
我想用“.”分割这个字符串以获得类似:['TITLE','wordX. aaa.: AAAAAAA;AAAAA', 'BBBB: bbbb']
问题是字符串 'wordX. aaa.: AAAAAAA;AAAAA'
本身包含一个点,所以通过我之前所说的拆分字符串,真正的输出将是:['TITLE','wordX','aaa.: AAAAAAA;AAAAA', 'BBBB: bbbb']
因此,我想要一个正则表达式,它可以让我告诉拆分找到“每个不跟随 wordX 的点”。在互联网上寻找这个,我发现有些人建议对这些情况使用负前瞻,比如^((?!wordX).)*$
。尽管如此,这显然对我不起作用(也许我没有以正确的方式使用它)。
由于这一切,我想知道如何构建一个正则表达式来匹配前面没有 wordX 并且后面跟着空格的每个点。
【问题讨论】:
您问题的第一部分和第二部分似乎不对应。你想只在一个点后面跟着一个短语,还是只在它后面没有某个短语时才找到它?如果是前者,一个简单的正向前瞻就足够了,例如\.(?=wordX). 如果你在匹配的点上分割字符串,你会不会得到["TITLE.wordX", " aaa", ": AAAAAAA;AAAAA", " BBBB: bbbb"]
?
@CarySwoveland 问题可能不清楚,但我用“点+空格”分割
@oriberu 我想做第二件事,找到前面没有wordX的点
您的最后一条评论与您问题的最后一句直接矛盾,并且该句子没有说明点后跟空格的必要性。请编辑。
【参考方案1】:
我仍然不完全清楚您到底想要哪种方案,所以这里有几个选项,每种情况都匹配。
正向预测:
\.(?=wordX)
TITLE.wordX. aaa.: AAAAAAA;AAAAA. BBBB: bbbb.
^
负前瞻:
\.(?!wordX)
TITLE.wordX. aaa.: AAAAAAA;AAAAA. BBBB: bbbb.
^ ^ ^ ^
正向回顾:
(?<=wordX)\.
TITLE.wordX. aaa.: AAAAAAA;AAAAA. BBBB: bbbb.
^
消极的后视:
(?<!wordX)\.
TITLE.wordX. aaa.: AAAAAAA;AAAAA. BBBB: bbbb.
^ ^ ^ ^
无论如何,您都应该改写您的问题。干杯。
【讨论】:
感谢您的回答。我确实改写了我的问题。我想要的替代方案是您谈论的最后一个,但是,在regextester.com 尝试它时,它似乎也在 wordX 之后标记了点 哦,对不起,我在另一个网站上试过了,它确实有效(问题是我谈到的第一页是针对 javascript 的)。谢谢! 是的,JavaScript 和lookbehinds 的历史相当悠久。但它在 2018 年标准中,我们可以希望得到广泛实施。 :)【参考方案2】:也许……
^(.*?)\.((.*?)(?<!wordX)\.(.*?))\. (.*)\.
给定:
TITLE.wordX. aaa.: AAAAAAA;AAAAA. BBBB: bbbb.
与组:
\1 \2 \5
演示:https://regex101.com/r/hPY8JX/2
糟糕,要更新 JS 吗?
^(.*?)\.(wordX\..*)\. (.*)\.
https://regex101.com/r/V49Fiw/1
【讨论】:
以上是关于匹配任何在[重复]之前没有特定单词的点的主要内容,如果未能解决你的问题,请参考以下文章