繁体   English   中英

[FORKING] Python正则表达式-Re.Sub和Re.Findall有趣的挑战

[英][FORKING]Python Regex - Re.Sub and Re.Findall Interesting Challenges

不知道这是否应该是赏金。 我只是想更好地了解正则表达式。

我检查了正则表达式中的响应以匹配pattern.one跳过换行符和字符,直到pattern.twoRegex匹配(如果找不到给定的文本,则匹配尽可能少的线程),并阅读有关Tempered Greedy Token SolutionsExplicit Greedy Alternation Solutions信息雷克斯·埃格(RexEgg),但坦率地说,这些解释使我感到困惑。

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

问题一:

给定以下带字符的字符串,其后跟/我将如何产生一个单正则表达式(仅使用re.sub或re.findall),该正则表达式必须使用交替捕获组,并且必须使用[\\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]+?)/并告诉regex如果捕获了这些,则忽略包含/或不包含结果的结果。包含-同时还使用了交替捕获组

我知道我不需要使用[\\S]+([\\S]+)但是我想看看是否有一个额外的指令可以使regex拒绝这两个通常会捕获的字符。

根据要求发布:

(?:(?!/)[\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] 
 )*

你可以用

/([-a-z]+)-\d+

并参加第一个捕获小组,请参阅regex101.com上的演示

暂无
暂无

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

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