找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1495|回复: 10

[求助] 正则问题

[复制链接]

已领礼包: 201个

财富等级: 日进斗金

发表于 2020-6-12 15:14:43 | 显示全部楼层 |阅读模式
悬赏20D豆未解决
本帖最后由 dyjwyqz5221 于 2020-6-15 12:03 编辑

下面这个语句能将str文字中红色部分替换成&,

(setq str "1层顶箍筋%%1328@100/150(%%1328-50/150),核心区箍筋%%13210-50"
        pat "%%\\d+[@-]\\d+\\/?\\d+"
        str1 (xdrx_string_regexpr pat str "&")
)
返回:"1层顶箍筋&(&),核心区箍筋&"


那么,如何用正则法则将str中非红色部分进行替换呢?比如替换成x

这样可以:

[Actionscript3] 纯文本查看 复制代码
(defun get::lst(str / pat)
        (setq str (xdrx_string_regexpr "%%132%%140R%%141|%%130%%140RH%%141|%%130|%%131|%%132|%%133" str "x")
                pat "x\\d+[@-]\\d+\\/?\\d+"
        );;;setq
        (mapcar
                '(lambda(x)
                        (mapcar 'atof (xdrx_string_regexps "[0-9]+" x))
                );;;lambda
                (xdrx_string_regexps pat str)
        );;;mapcar
);;;defun

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 20个

财富等级: 恭喜发财

发表于 2020-6-12 16:51:27 | 显示全部楼层
命令: (xdrx-string-regexps "[^%%1328@100/150|%%1328-50/150|%%13210-50]+" str)
("层顶箍筋" "(" "-" "),核心区箍筋" "-")

命令: (xdrx-string-regexpr "[^%%1328@100/150|%%1328-50/150|%%13210-50]+" str "*")
"1*%%1328@100/150*%%1328*50/150*%%13210*50"

点评

替换完的预期结果是: "x%%1328@100/150x%%1328-50/150x%%13210-50"  详情 回复 发表于 2020-6-12 17:04
1、箍筋里面的数字可以很多种,不可能一一罗列,如:%%132后面可以是:8~14@100,8@50,8@150,@180,10@100,10@200... 8@100/150,8@100/200....,@也可以是- 2、最前面的数字1是要被替换掉的。  详情 回复 发表于 2020-6-12 17:00
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2020-6-12 17:00:02 | 显示全部楼层
marting 发表于 2020-6-12 16:51
命令: (xdrx-string-regexps "[^%%1328@100/150|%%1328-50/150|%%13210-50]+" str)
("层顶箍筋" "(" "-" " ...

1、箍筋里面的数字可以很多种,不可能一一罗列,如:%%132后面可以是:8~14@100,8@50,8@150,8@200.8@180,10@100,10@200...
8@100/150,8@100/200....,@也可以是-
2、最前面的数字1是要被替换掉的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2020-6-12 17:04:15 | 显示全部楼层
marting 发表于 2020-6-12 16:51
命令: (xdrx-string-regexps "[^%%1328@100/150|%%1328-50/150|%%13210-50]+" str)
("层顶箍筋" "(" "-" " ...

替换完的预期结果是:
"x%%1328@100/150x%%1328-50/150x%%13210-50"
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2020-6-12 17:20:07 | 显示全部楼层
dyjwyqz5221 发表于 2020-6-12 17:00
1、箍筋里面的数字可以很多种,不可能一一罗列,如:%%132后面可以是:8~14@100,8@50,8@150,@180,10@100 ...

命令: (xdrx-string-regexps "[^%%\\d+@\\d+\\/?\\d+|%%\\d+\\-\\d+\\/?\\d+]+" str)
("层顶箍筋" "(" "),核心区箍筋")

命令: (xdrx-string-regexpr "[^%%\\d+@\\d+\\/?\\d+|%%\\d+\\-\\d+\\/?\\d+]+" str "X")
"1X%%1328@100/150X%%1328-50/150X%%13210-50"

点评

这个非运算符是将里面的内容拆开来运行的,因此,数字是去不掉的,假如再有单独的@或-、/等,它也替换不掉的。  详情 回复 发表于 2020-6-12 17:39
前面那个1怎么去不掉呢?我测试了下也是这样  详情 回复 发表于 2020-6-12 17:28
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2020-6-12 17:20:20 | 显示全部楼层
做了个曲线救国的
这样可以完成提取了
(setq str "1层顶箍筋%%1328@100/150(%%1328-50/150),核心区箍筋%%13210-50"
        pat "%%\\d+[@-]\\d+\\/?\\d+"
        str1 (XD::List->String (xdrx_string_regexps pat str) "x")
)

"%%1328@100/150x%%1328-50/150x%%13210-50"


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2020-6-12 17:27:02 | 显示全部楼层
其真正的目的在于提取出箍筋中的钢筋直径及间距来,无关的数字、汉字括号等均去掉。
无关的数字不知道在哪个位置,所以最后一个取还是可行的

[Actionscript3] 纯文本查看 复制代码
(setq str "1层顶箍筋%%1328@100/150(%%1328-50/150),核心区箍筋%%13210-50"
	pat "%%\\d+[@-]\\d+\\/?\\d+"
	str (XD::List->String (xdrx_string_regexps pat str) "x")
	str (xdrx_string_regexpr "%%132%%140R%%141|%%130%%140RH%%141|%%130|%%131|%%132|%%133" str "x")
	lst (mapcar 'atoi (xdrx_string_regexps "[0-9]+" str))
)


(8 100 150 8 50 150 10 50)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2020-6-12 17:28:47 | 显示全部楼层
本帖最后由 dyjwyqz5221 于 2020-6-12 17:30 编辑
marting 发表于 2020-6-12 17:20
命令: (xdrx-string-regexps "[^%%\\d+@\\d+\\/?\\d+|%%\\d+\\-\\d+\\/?\\d+]+" str)
("层顶箍筋" "(" " ...

前面那个1怎么去不掉呢?我测试了下也是这样如果能用一句执行完,那是最好的了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2020-6-12 17:39:20 | 显示全部楼层
本帖最后由 dyjwyqz5221 于 2020-6-12 18:15 编辑
marting 发表于 2020-6-12 17:20
命令: (xdrx-string-regexps "[^%%\\d+@\\d+\\/?\\d+|%%\\d+\\-\\d+\\/?\\d+]+" str)
("层顶箍筋" "(" " ...

这个非运算符是将里面的内容拆开来运行的,因此,数字是去不掉的,假如再有单独的@或-、/等,它也替换不掉的。你这个效果与(xdrx-string-regexps "[^%\\d+@\\/\\-]+" str)相同吧。
(setq str "1层顶100箍筋%%1328@100/150(%%1328-50/150),核心区@箍筋%%13210-50,236523"
        str (xdrx_string_regexps "[^%\\d+@\\/\\-]+" str)
)

("层顶" "箍筋" "(" "),核心区" "箍筋" ",")


(setq str "1层顶100箍筋%%1328@100/150(%%1328-50/150),核心区@箍筋%%13210-50,236523"
        str (xdrx_string_regexp "[^%\\d+@\\/\\-]+" str)
)


((0 "1层顶100箍筋") (10 "1328") (15 "100") (19 "150(") (25 "1328") (30 "50") (33 "150),核心区") (42 "箍筋") (46 "13210") (52 "50,236523"))

看到了吧,是拆开提取的。




论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2020-6-12 17:45:09 | 显示全部楼层
(setq str "1层顶100箍筋%%1328@100/150(%%1328-50/150),核心区@箍筋%%13210-50,236523"
        pat "%%\\d+[@-]\\d+\\/?\\d+"
        str (XD::List->String (xdrx_string_regexps pat str) "x")
        str (xdrx_string_regexpr "%%132%%140R%%141|%%130%%140RH%%141|%%130|%%131|%%132|%%133" str "x")
        lst (mapcar 'atoi (xdrx_string_regexps "[0-9]+" str))
)

(8 100 150 8 50 150 10 50)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2020-6-13 08:45:33 | 显示全部楼层
本帖最后由 dyjwyqz5221 于 2020-6-13 08:51 编辑

多种钢筋符号时,这样取还是有问题的,修改为这样就更加方便了。
(setq str "10层核心区箍筋:%%1328@100/150(%%130%%140RH%%14110-100)")

[Actionscript3] 纯文本查看 复制代码
(defun get::lst(str / pat)
        (setq str (xdrx_string_regexpr "%%132%%140R%%141|%%130%%140RH%%141|%%130|%%131|%%132|%%133" str "x")
                pat "x\\d+[@-]\\d+\\/?\\d+"
        );;;setq
        (mapcar
                '(lambda(x)
                        (mapcar 'atoi (xdrx_string_regexps "[0-9]+" x))
                );;;lambda
                (xdrx_string_regexps pat str)
        );;;mapcar
);;;defun


((8 100 150) (10 100))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-18 14:13 , Processed in 0.388836 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表