求助一个正则的问题,急

2023-04-27 18:57:23 +08:00
 likefly

有一个报文:

<?xml><root><person><id>123</id></person><person><id>789</id></person></root>

只需要 <id></id> 标签中的的值,例如转换成 123-789,在 sumlime text 中要怎么替换呢,以下是我写的正则:

<\?xml><root>(<person><id>(\d+)</id></person>)+</root>

替换的时候需要怎么处理呢

1659 次点击
所在节点    程序员
26 条回复
ruke
2023-04-28 10:01:49 +08:00
ruke
2023-04-28 10:02:25 +08:00
.*?(\d+).*?(\d+).*

$1-$2
setsunakute
2023-04-28 13:57:05 +08:00
[^\d]+<id>|</id>[^\d]+ 替换为\n 即可
setsunakute
2023-04-28 13:58:01 +08:00
[^\d]+<id>|</id>[^\d]+ 替换为-
ns09005264
2023-04-28 19:39:53 +08:00
rust 里用 captures_iter 倒是可以轻松做到。
```
let regex = Regex::new(r"<id>(\d+)</id>").unwrap();
let str = "<?xml><root><person><id>123</id></person><person><id>456</id></person><person><id>789</id></person></root>";
let result = regex
.captures_iter(str)
.map(|cap| cap[1].to_string())
.collect::<Vec<_>>()
.join("-");
assert_eq!(result, "123-456-789");
```
vim 里可以分多步处理
ns09005264
2023-04-28 19:45:46 +08:00
vim 里分三步,第一步把所有的`<tag>`替换为`-`,第二步把首尾的`-`去掉,第三步把连续的`---`替换为单个`-`
```
:%s/\v(\<.{-}\>)/-/g
:%s/\v(^-+|-+$)//g
:%s/\v(-+)/-/g
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/936024

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX