cqwcns 发表于 2022-11-2 18:00

正则表达式,匹配特定字符之间的内容

目标字符是:<actionId>20433451</actionId>
需要获得的结果是:20433451


我一直无法掌握正则表达式,虽然很简单,但我尝试利用某度搜到的例子来套改,但还是无法实现我的需求。
小白,请各位大佬指教,感谢。

平淡最真 发表于 2022-11-2 18:07

(?<=<actionId>)\d+(?=</actionId>)

猛浪若奔 发表于 2022-11-2 18:09

JS:
"<actionId>20433451</actionId>".replace(/\D/g, '')

平淡最真 发表于 2022-11-2 18:12

中间如果不全是数字的话把\d+ 换成.*?
https://img01-xusong.91q.com/A327449C-9267-4491-977C-4E98FFB20AF6.jpg

甜萝 发表于 2022-11-2 18:22

本帖最后由 paypojie 于 2022-11-2 19:02 编辑



python代码
# <actionId>20433451</actionId>
import re
r = re.compile(r'\d+')
# r =re.compile(r'+') # 这行代码可以替换上一行代码 一样的效果
m = r.search('<actionId>20433451</actionId>')
print(m.group())

笨笨家的唯一 发表于 2022-11-2 18:56

如果匹配中间的你可以写【/<a.*?d>(.*?)</】; 【<a.*?d>】的意思时匹配【<ad> <a1d> <aaad>】之类的,然后后面【>(.*?)<】表示匹配满足前面条件的字符串

ysjd22 发表于 2022-11-2 18:57

用环视。有的叫什么断言。(?>=)(?=)

hfxiang 发表于 2022-11-2 21:05

这个与使用的应用有关,并且相互间不一定兼容。如用awk,则可把<actionId>20433451</actionId>保存为1.txt,如下方式可提取,并且单awk都还可以更多:
D:\test>awk "{print gensub(/^<.+>(.+)<.+>$/,\"\\1\",\"g\")}" 1.txt
20433451
D:\test>awk -F"[<>]+" "{print $3}" 1.txt
20433451

小小超 发表于 2022-11-3 15:48

sed 's/<actionld>(.*)<\/actionld>/\1/'
页: [1]
查看完整版本: 正则表达式,匹配特定字符之间的内容