gpt4 book ai didi

python - [FORKING]Python Regex - Re.Sub 和 Re.Findall 有趣的挑战

转载 作者:太空宇宙 更新时间:2023-11-04 00:02:07 26 4
gpt4 key购买 nike

不确定这是否应该是赏金。我只是想更好地理解正则表达式。

我检查了 Regex to match pattern.one skip newlines and characters until pattern.two 中的回复和 Regex to match if given text is not found and match as little as possible线程并阅读关于 RexEgg 的 Tempered Greedy Token SolutionsExplicit Greedy Alternation Solutions,但诚然,这些解释让我感到困惑。

我花了最后一天时间主要摆弄 re.sub(和 findall),因为 re.sub 的行为对我来说很奇怪。

.

问题 1:

给定以下字符后跟 / 的字符串,我将如何生成一个使用必须使用 [\S]+/ 得到想要的输出

>>> string_1 = 'variety.com/2017/biz/news/tax-march-donald-trump-protest-1202031487/'
>>> string_2 = 'variety.com/2017/biz/the/life/of/madam/green/news/tax-march-donald-trump-protest-1202031487/'
>>> string_3 = 'variety.com/2017/biz/the/life/of/news/tax-march-donald-trump-protest-1202031487/the/days/of/our/lives'

给定条件所需的输出 (!!)

tax-march-donald-trump-protest-

条件:必须使用必须捕获 ([\S]+)([\S]+?)/ 的交替捕获组来捕获其他组,但如果它们不包含 -

则忽略它们

我很清楚最好使用 re.findall('([\-]*(?:[^/]+?\-)+)[\d] +', string) 或类似的东西,但我想知道我是否可以使用 [\S]+([\S]+)([\S]+?)/ 并告诉正则表达式,如果捕获了这些,忽略包含 / 或不包含 - 的结果> 同时还使用了交替捕获组

我知道我不需要使用 [\S]+([\S]+) 但我想看看是否有一个额外的指令,我可以使用它来使正则表达式拒绝一些它们通常会捕获的字符。

最佳答案

根据请求发布:

(?:(?!/)[\S])*-(?:(?!/)[\S])*

https://regex101.com/r/azrwjO/1

解释

 (?:                           # Optional group
(?! / ) # Not a forward slash ahead
[\S] # Not whitespace class
)* # End group, do 0 to many times
- # A dash must exist
(?: # Optional group, same as above
(?! / )
[\S]
)*

关于python - [FORKING]Python Regex - Re.Sub 和 Re.Findall 有趣的挑战,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55362988/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com