求助一个正则的问题,急

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>

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

1658 次点击
所在节点    程序员
26 条回复
sheeta
2023-04-27 18:58:06 +08:00
$2
likefly
2023-04-27 19:05:13 +08:00
@sheeta 只能取到 789
AoEiuV020CN
2023-04-27 19:08:35 +08:00
@likefly 举一反三,$1 就能得到 123 了,
jsrunner
2023-04-27 19:08:35 +08:00
import re

xml_str = '<?xml><root><person><id>123</id></person><person><id>789</id></person></root>'

# 定义正则表达式模式,匹配 <id> 标签和其中的文本
pattern = re.compile(r'<id>(.*?)</id>')

# 使用 findall 方法查找所有匹配项,并返回匹配的文本列表
matches = pattern.findall(xml_str)

# 输出匹配的结果
print(matches) # 输出 ['123', '789']
likefly
2023-04-27 19:15:07 +08:00
@AoEiuV020CN $1 只能取到外面括号的值
sheeta
2023-04-27 19:17:37 +08:00
@likefly 抱歉,是我的问题,这个只能取到最后一个匹配的
likefly
2023-04-27 19:18:06 +08:00
@jsrunner 感谢,工作环境用不了代码,要怎么在编辑器里面直接替换出来 - -
NoOneNoBody
2023-04-27 19:20:54 +08:00
这个需要正则递归,python 内置 re 并不支持,sublimetext 也不能直接完成
所以开个 console 按 #4 的方法手动吧

三方包 regex 支持递归
mohumohu
2023-04-27 19:21:52 +08:00
简单啊,你们就是把问题想复杂了,用什么正则,你直接把<root><person><id>替换成<root>,</id></person><person><id>替换成-,</id></person>替换成空不就好了吗
likefly
2023-04-27 19:24:00 +08:00
@NoOneNoBody 原来如此,我就是想递归,感谢
Glauben
2023-04-27 19:25:00 +08:00
这种问题一律建议问 ChatGPT
likefly
2023-04-27 19:26:08 +08:00
@mohumohu 感谢,这确实是个好方法
likefly
2023-04-27 19:27:08 +08:00
@Glauben 落伍了,都没注册账号
mmnnyycc
2023-04-27 20:15:59 +08:00
(?<=<id>)[^<]+(?=</id>),这个 chatgpt 给的,一秒钟给出,还配合一个了一个 python 的代码
mohumohu
2023-04-27 20:36:20 +08:00
@mmnnyycc OP 问的是怎么替换,不是怎么匹配,就这个表达式都用不着 gpt 写
weeei
2023-04-27 20:41:43 +08:00
Regex: (.+)<id>(.+?)</id>(.+?)<id>(.+?)</id>(.+)
With: $2 - $4
Ericcccccccc
2023-04-27 20:44:06 +08:00
这种问题适合问 chatgpt
busterian
2023-04-27 20:53:21 +08:00
<id>(.+?)<\/id>
<id>$1</id>
mobbdeep
2023-04-27 21:17:58 +08:00
感觉 gpt 要吃掉不少爆栈或者 csdn 的份额啊
jslang
2023-04-28 09:49:02 +08:00
为什么用正则,这个解析 XML ,然后再拼接啊

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

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

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

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

© 2021 V2EX