【发布时间】:2021-05-11 06:32:25
【问题描述】:
下面的代码有问题,不知道怎么写
(defun padname (strg)
(string-match "[uU]_\\(.*\\)\\(_[0-9\]+\\)?" strg)
(match-string 1 strg)
)
(padname "u_CLR_REQ_SUP_00")
"CLR_REQ_SUP_00" ==> expect "CLR_REQ_SUP"
(padname "u_CLR_REQ_SUP_0")
"CLR_REQ_SUP_0" ==> expect "CLR_REQ_SUP"
(padname "u_PTO_AVDD_3P3_0")
"PTO_AVDD_3P3_0" ==> expect "PTO_AVDD_3P3"
(padname "u_PTO_0")
"PTO_0" ==> expect "PTO"
(padname "u_PTO")
"PTO" ==> as expected
(padname "u_BTNI")
"BTNI" ==> as expected
【问题讨论】:
-
试试
[Uu]_\\(.*?\\)\\(_[0-9]+\\)?$ -
@Thefourthbird 请把它写成答案。
M-x elisp-index-search RET non-greedy RET是一个很好的参考。 -
@bks: 你最后的
\(_[0-9]+\)?组永远是空的,因为前面的.*可以匹配那个文本,而后面的?表示最后一个组可以是空的. -
@phils:谢谢,现在解释清楚了。另外,感谢您的指点。