在查找和替换中使用正则表达式来提取除 pattern/string 之外的所有内容

Use regex in Find & Replace to extract everything but a pattern/string

我想从任何亚马逊 URL 提取 ASIN。我找到 this,给我以下正则表达式:

/([a-zA-Z0-9]{10})(?:[/?]|$)

这个表达式在 Excel 中对我有用。但是,我还使用了另一种工具,我只能使用 Find & Replace 编辑我的文本。我可以使用正则表达式,但该工具将始终替换我的正则表达式的结果。

当我使用上面的表达式时,该工具将准确找到我要查找的字符串,但随后会将其替换为空白或我在替换字段中输入的任何内容。

当我必须使用“查找和替换”时,正则表达式必须如何查看?我假设它应该 match/find 除了 ASIN/string 之外的任何东西,然后将其替换为空白。归根结底,除 ASIN 外,所有内容都应 deleted/replaced。

示例输入:

https://www.amazon.de/gp/product/**B00ZFWRGXC**/ref=br_asw_pdt-1?pf_rd_m=A3JWKAKI7XB7XF&pf_rd_s=desktop-6&pf_rd_r=BKAKXRSA7JM715TZ38YN&pf_rd_t=36701&pf_rd_p=f54c1f0d-d685-4847-826e-7fdd8c321011&pf_rd_i=desktop

我只想保留粗体部分(通过查找和替换)。

您可以使用基于交替的正则表达式,其中一个分支匹配并捕获您需要的内容,而另一个将只匹配所有未开始序列的文本。

使用

/([a-zA-Z0-9]{10})|(?:(?!/[a-zA-Z0-9]{10}).)*

并替换为 \n。为了让它更好地工作,请确保 . 匹配换行选项(如果存在)已打开。如果不存在,请将 . 替换为 [\s\S]

详情:

  • /([a-zA-Z0-9]{10}) - 匹配一个 / 并捕获 10 个字母数字符号
  • | - 或
  • (?:(?!/[a-zA-Z0-9]{10}).)* - 不以 / 后跟 10 个字母数字符号开始的任何 0+ 字符。

是一个反向引用,用于恢复结果中捕获组(10 个字母数字符号)的内容。

/([A-Z0-9]{10})|(?:(?!/[A-Z0-9]{10}).)*

/([a-zA-Z0-9]{10})/|(?:(?!/[a-zA-Z0-9]{10}/).)*

会修复它。