js正则表达式判断字符串包含/cluster,并且不是/clusters
时间: 2023-08-18 15:05:20 浏览: 179
可以使用正则表达式来判断一个字符串是否包含某个子串,并且不包含另一个子串。对于这个问题,可以使用如下的正则表达式:
```javascript
/^.*\/cluster(?!s).*$/g
```
解释一下这个正则表达式:
- `^.*`:表示从字符串开头开始匹配任意字符(包括空字符)0次或多次。
- `\/cluster`:表示匹配 "/cluster" 子串,其中 / 需要使用转义字符。
- `(?!s)`:表示不匹配 "s" 字符,其中 "?" 表示零宽负向先行断言。
- `.*$`:表示匹配任意字符(包括空字符)0次或多次,直到字符串结尾。
- `/g`:表示全局匹配模式。
这个正则表达式的意思是:匹配以任意字符开头,后面包含 "/cluster" 子串,但是不包含 "/clusters" 子串的字符串。
下面是一段示例代码:
```javascript
const str1 = "/cluster/abc";
const str2 = "/clusters/abc";
const str3 = "/clusterdef";
const regex = /^.*\/cluster(?!s).*$/g;
console.log(regex.test(str1)); // true
console.log(regex.test(str2)); // false
console.log(regex.test(str3)); // true
```
可以看到,对于符合条件的字符串,test 方法会返回 true,否则返回 false。
相关问题
我的字符串可能是 /cluster?id=1
如果你的字符串可能是 `"/cluster?id=1"` 这种形式,那么可以将正则表达式修改为如下形式:
```javascript
/^.*\/cluster(?!s)(\?.*)?$/g
```
这里增加了一个 `(\?.*)?` 的部分,用于匹配可能存在的查询参数。其中:
- `\?`:表示匹配 "?" 字符,其中 "?" 需要使用转义字符。
- `.*`:表示匹配任意字符(包括空字符)0次或多次。
- `(\?.*)?`:表示匹配可能存在的查询参数部分,其中 "?" 表示该部分是一个可选项,最多只匹配一次。
这个正则表达式的意思是:匹配以任意字符开头,后面包含 "/cluster" 子串,但是不包含 "/clusters" 子串,并且可能包含查询参数的字符串。
下面是一段示例代码:
```javascript
const str1 = "/cluster?id=1";
const str2 = "/clusters/abc";
const str3 = "/clusterdef";
const regex = /^.*\/cluster(?!s)(\?.*)?$/g;
console.log(regex.test(str1)); // true
console.log(regex.test(str2)); // false
console.log(regex.test(str3)); // true
```
可以看到,对于符合条件的字符串,test 方法会返回 true,否则返回 false。
nCluster = 9 kmodel = KMeans(n_clusters=nCluster, random_state=728) kmodel.fit(pred_images) kpredictions = kmodel.predict(pred_images) shutil.rmtree('D:/wjd/15') for i in range(nCluster): os.makedirs("D:/wjd/15/cluster" + str(i)) for i in range(len(paths)): shutil.copy2(paths[i], "D:/wjd/15/cluster" + str(kpredictions[i]))
根据你提供的代码,这段代码的功能是使用K均值聚类算法对`pred_images`进行聚类,并将每个样本分配到相应的聚类簇中。然后,根据聚类结果将原始图片文件拷贝到不同的目录中,以便于后续对聚类结果进行分析或展示。
具体而言,代码中的步骤如下:
1. 定义了聚类的簇数`nCluster`为9,并创建了一个KMeans对象`kmodel`,使用随机种子`random_state=728`进行初始化。
2. 使用`kmodel.fit(pred_images)`对`pred_images`进行聚类,得到每个样本的聚类标签。
3. 创建了一个目录`D:/wjd/15`,如果该目录已存在,则先删除该目录及其下的所有文件和子目录。
4. 使用循环创建了9个目录`D:/wjd/15/cluster0`、`D:/wjd/15/cluster1`、...、`D:/wjd/15/cluster8`,用于存放每个聚类簇的图片文件。
5. 根据每个样本的聚类标签,将对应的图片文件从原始路径`paths`复制到相应的聚类簇目录中,命名方式为`D:/wjd/15/clusterX/imageY`,其中X为聚类簇的索引,Y为图片在原始路径中的索引。
这段代码的效果是将聚类结果可视化,将每个聚类簇的图片文件分别存放在不同的目录中,方便进一步分析和观察聚类结果。
阅读全文