regex 如何使用正则表达式从具有两种可能格式的字符串中提取子字符串?[关闭]

v1l68za4  于 2023-03-31  发布在  其他
关注(0)|答案(1)|浏览(135)

已关闭,此问题需要更focused,目前不接受回答。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

11天前关闭。
Improve this question
使用Regex,我如何从一个字符串中提取子字符串ACB-R5TGDRSAuE76Tt1ZPa5qPv9cp23QLaJfni84B7MXrcI,该字符串可以具有以下(url)格式之一:

  1. https://lh3.googleusercontent.com/a-/ACB-R5TGDRSAuE76Tt1ZPa5qPv9cp23QLaJfni84B7MXrcI=s120-c-c0x00000000-cc-rp-mo-br100
  2. https://lh3.googleusercontent.com/a/ACB-R5TGDRSAuE76Tt1ZPa5qPv9cp23QLaJfni84B7MXrcI=s120-c-c0x00000000-cc-rp-mo-br100
  • 区别在于/a//a-/前缀。

我自己也无法写出正确的正则表达式,我所做的最多就是这样:(?<=/a/)(.*?)=但这并不能解决问题。

owfi6suc

owfi6suc1#

1.若要匹配前缀但在结果中忽略它,请使用lookbehind表达式(?<=),但是您只需要告诉它使用|操作符匹配/a//a-/。另外,对特殊字符(如/-)进行转义也很明智。所以你需要在它们前面加上\来告诉Regex你想把它们当作普通字符来处理,所以正确的前缀匹配表达式是:(?<=\/a\/|a\-\/)
1.您不需要在(.*?)中使用?,因为您知道ID中应该有一些字符。
1.要匹配后缀(=)但在结果中忽略它,需要使用预视表达式(?=):(?=\=)
最后一个正则表达式(?<=\/a\/|a\-\/)(.*)(?=\=)将给予要查找的子字符串。

相关问题