繁体   English   中英

正则表达式:第二次匹配

Regex: Match from second occurence

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我创建了一个正则表达式来匹配字符串中的第n个出现:

^(?:[^-]*-){2}([^-].*)

但是,在正则表达式工具中对其进行测试并未获得100%匹配的解决方案:

例如:

来源:动物-愤怒的动物之怒XL锻炼前葡萄-151克

预期:动物-愤怒的动物之怒XL锻炼前葡萄

已测试:动物-Animal Rage XL Pre

来源:AST体育科学-R-ALA 200-90粒

预期:AST体育科学-R-ALA 200

测试:AST体育科学-R

我知道在上面的正则表达式中它匹配第二个出现的“-”,我将创建下一个正则表达式:

^(?:[^-]*\s-\s){2}([^-].*)

但这完全错过了上面的例子。

我对完美的正则表达式工作怀念什么?

感谢帮助。

2 个回复

您可以尝试以下方法。

>>> s = 'ANIMAL - Animal Rage XL Pre-Workout Grape of Wrath - 151 Grams'
>>> s1 = 'AST Sports Science - R-ALA 200 - 90 Capsules'
>>> re.search(r'^(?:.*? - .*?)(?= - )', s).group()
'ANIMAL - Animal Rage XL Pre-Workout Grape of Wrath'
>>> re.search(r'^(?:.*? - .*?)(?= - )', s1).group()
'AST Sports Science - R-ALA 200'

https://regex101.com/r/sJ9gM7/29

您也可以使用re.sub函数。

>>> re.sub(r' - (?:(?! - ).)*$', '', s)
'ANIMAL - Animal Rage XL Pre-Workout Grape of Wrath'
>>> re.sub(r' - (?:(?! - ).)*$', '', s1)
'AST Sports Science - R-ALA 200'

这与<space>hyphen<space>分隔字符串的最后一部分匹配。 用空字符串替换匹配项将为您提供所需的输出。

看起来您正在寻找此正则表达式:( (?m)^(.*)(\\s+\\-\\s+(?!\\s\\-\\s).*)$

Python示例代码:

str1 = 'ANIMAL - Animal Rage XL Pre-Workout Grape of Wrath - 151 Grams'
str2 = 'Anjolie Ayurveda - Rosemary Lavender and Neem Tulsi Soap Herbal Gift Box - CLEARANCE PRICED Nourish Your Skin & Awaken Your Senses'
print re.sub(r"(?m)^(.*)(\s+\-\s+(?!\s\-\s).*)$", "\g<1>", str1)
print re.sub(r"(?m)^(.*)(\s+\-\s+(?!\s\-\s).*)$", "\g<1>", str2)

输出:

ANIMAL - Animal Rage XL Pre-Workout Grape of Wrath                                                                                                                                                                                                     
Anjolie Ayurveda - Rosemary Lavender and Neem Tulsi Soap Herbal Gift Box
2 正则表达式匹配第二次出现。 我需要它来匹配第一次出现

这是我的正则表达式代码: 这是我的数据字符串: 这是正确抓取以第一个$符号结尾的第二个项目: 但对于第一个字符串,我希望它抓住: 相反它是抓住: 所以我想让它获得第一个X和一切到空间。 但是第二个X正在触发比赛。 以“X”开头的字符串总是13个字符 ...

2017-10-26 01:13:54 2 83   regex
3 正则表达式-仅匹配行中的第一个匹配项,每秒忽略一次

我有一个文本文件中的行,我只想匹配数字的第一个出现而忽略第二个。 字符串看起来像这样: 所以我只想匹配: 1 2 3 5 10 20 30 50 100或用户可能想要输入的任何其他数字。 仅匹配数字非常容易[0-9]+ 。 但是,如何使它仅与第一个匹配? 在此先感谢您的帮助! ...

2018-02-08 07:18:36 4 61   regex
4 正则表达式从字符的倒数第二个出现开始显示字符串

需要一个正则表达式来显示字符的倒数第二个出现的字符串 示例:“ / folder1 / folder2 / folder3 / folder4 /” 在这种情况下,如果我要求从last开始第二次出现斜杠(/),它会出现在folder4之前,并且我希望从字符的第二次出现返回子字符串。 ...

5 正则表达式仅捕获第二次出现

您好,我使用此正则表达式模式: 在此文本上: 正则表达式只捕获 我试图仅捕获命令cd /opt/blabla和nano /etc/d为什么正则表达式不捕获cd /opt/blabla ? 编辑:我试图首先将所有非ascii字符转换为空格,现在文本看起来像: ...

8 perl正则表达式匹配首次出现

我有以下内容: 什么是匹配/打印“有效y”的正确正则表达式 当前的正则表达式匹配“fldA”和贪婪的匹配并跳过它的值,而是给我最后一个值:“invalid val x” 谢谢, 枷锁 ...

9 在Regex中首次出现匹配

我有以下文字: “猫狗老鼠狮子” 我使用正则表达式搜索“狗”或“鼠标”: C#中Regex的行为方式是它首先搜索单词dog。 如果找到匹配,则停止。 如何在正则表达式中找到我的任何单词的第一次出现后停止,这意味着在“cat”之后停止,因为这首先出现? 我是否必须进行 ...

2013-06-13 11:08:17 2 179   c#/ regex
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM