cdzjf 发表于 2024-11-21 14:30:32

使用正则怎样才可以向后匹配到第某个出现的字符串呢

比如网址

https://pay.jd.com/d/cashier-support/finishPage/?token=2861e6c218ce/af427e79d/395f1/09e3

类似这样的,我要匹配第3个/之前的所有的数据https://pay.jd.com/d/cashier-support,这样正则应该怎样写?


或者一段字符串   iQPNhHnDueAxHdXeEbrhEhtfd
我想要第2个出现H以前的所有字符串iQPNhHnDueAx这样应该怎样写?

FishC 发表于 2024-11-21 14:42:20

要实现向后匹配直到第 N 个出现的字符,请使用如下的正则表达式:

1. 对于网址中的例子:
   - 你需要匹配网址中第 3 个 `/` 之前的所有数据,正则表达式可以这样写:
   ^([^/]+/){2}[^/]+
   - 解释:
   - `^` 表示匹配字符串的开始。
   - `([^/]+/)` 表示匹配非 `/` 字符的一个或多个加上一个 `/`,用括号括起来是为了分组。
   - `{2}` 代表这个分组重复两次,表示匹配前两个 `/`。
   - `[^/]+` 匹配第三个 `/` 之前的所有非 `/` 字符。

2. 对于字符串例子:
   - 要匹配第二个出现的 `H` 之前的所有字符串,正则表达式如下:
   ^[^H]*H[^H]*
   - 解释:
   - `^` 表示匹配字符串的开始。
   - `[^H]*` 匹配0个或多个非 `H` 的字符。
   - `H` 匹配第一个 `H`,为了找到第二个 `H` 的位置。
   - `[^H]*` 继续匹配直到第二个 `H` 为止,这样完整匹配就只会把两个 `H` 之间的内容算进去。

可以在支持正则表达式的环境中如Python、JavaScript中测试这些表达式。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

cdzjf 发表于 2024-11-22 09:49:38

FishC 发表于 2024-11-21 14:42
要实现向后匹配直到第 N 个出现的字符,请使用如下的正则表达式:

1. 对于网址中的例子:


第一个做法不对,用第二个方法来做第一个,改进一下可以

re.findall('^[^/]*/[^/]*/[^/]*/[^/]*/[^/]*',

但问题是这样如果我要第25个出现/这个的不就要复制20多次?

isdkz 发表于 2024-11-22 15:00:55

https://^([^/]+/){2}[^/]+
页: [1]
查看完整版本: 使用正则怎样才可以向后匹配到第某个出现的字符串呢