[英][FORKING]Python Regex - Re.Sub and Re.Findall Interesting Challenges
不知道这是否应该是赏金。 我只是想更好地了解正则表达式。
我检查了正则表达式中的响应以匹配pattern.one跳过换行符和字符,直到pattern.two和Regex匹配(如果找不到给定的文本,则匹配尽可能少的线程),并阅读有关Tempered Greedy Token Solutions
和Explicit 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]
)*
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.