您可以查看简单的字符串模式相当确定(不想说“很好”),从make内:
[A-F] := A B C D E F#
[a-f] := a b c d e f#
[A-Z] := $([A-F]) G H I J K L M N O P Q R S T U V W X Y Z#
[a-z] := $([a-f]) g h i j k l m n o p q r s t u v w x y z#
[0-9] := 0 1 2 3 4 5 6 7 8 9#
######################################################################
##### $(call explode,_stringlist_,_string_)
## Insert a blank after every occurrence of the strings from _stringlist_ in _string_.
## This function serves mainly to convert a string into a list.
## Example: `$(call explode,0 1 2 3 4 5 6 7 8 9,0xl337c0de)` --> `0 xl3 3 7 c0 de`
explode = $(if $1,$(subst $(firstword $1),$(firstword $1) ,$(call explode,$(wordlist 2,255,$1),$2)),$2)
ID := A12345-789 B98765-123 C58730-417 123456+328
############################################################
# $(call check-id,_id-string_)
# Return 'malformed' or the given id
check-id = $(if $(call check-id-1,$(call explode,- $([A-Z]) $([0-9]),$1)),malformed,$1)
check-id-1 = $(strip $(filter-out $([A-Z]),$(wordlist 1,1,$1)) $(filter-out $([0-9]),$(wordlist 2,6,$1)) $(filter-out -,$(word 7,$1)) $(filter-out $([0-9]),$(wordlist 8,10,$1)))
$(info $(foreach w,$(ID),$(call check-id,$(w))))
一个会怎么做,取决于一些其他因素。这些文件是针对自己的,还是仅仅是生成的,而另一个目标是作为副产品构建的?如果这些文件是自己的目标,我认为你的makefile是自己生成的,你最近怎么做?请阅读[mcve](https://stackoverflow.com/help/mcve)。 – Krom
我建议将名称测试委托给脚本。你对哪些脚本语言感到满意? – Beta
@Beta:我很喜欢python – Vicky