我要做的是将速记符号与ISO前缀(1k = 1000
、-1ki = -1024
等)匹配。这个正则表达式很接近:
^([+-]?)(\d+)((?i)[KMGTPEZY]?(?i)i?$)
但是它匹配1i
,所以我试图找到一个正则表达式,如果它前面有character类中的一个字母,它将只匹配i
。我试着用一个了望台:
^([+-]?)(\d+)((?i)[KMGTPEZY]?(?<=(?i)[KMGTPEZY])(?i)i?$)
它不会匹配1i
,但是现在它不会匹配像1
这样没有前缀的数字,而且似乎。。。不得不重复(?i)[KMGTPEZY]
是不雅的,所以我希望有一种更优雅的方式来做这件事。。。这在Python中也适用:-)。你知道吗
如果它影响到答案,完整的问题是我想处理像1
,2
,3
,[5-10)
,20-25
,1k-2k
,2Mi-3Gi
,10T
。。。将适当的数字替换为前缀速记(1k=1000
,10ki=10240
,等等),然后生成实际序列的列表(因此将[5-10)
展开为5,6,7,8,9
,20-25
相当于[20-25]
或20,21,22,23,24,25
),但是现在,我正处于第一步,这只是匹配前缀速记符号。你知道吗
是的,人们也许可以用奇特的特征来解决这个问题。 但不,那没必要。你知道吗
简单的交替就足够了。你知道吗
也就是说,例如,我们想匹配“Ki”,或匹配“K”,或匹配。。。你知道吗
这其实很简单:
这里我们指定一个可选组
([KMGTPEZY]i?)?
,它本身包含可选匹配i?
。你知道吗注意,作为一个全局标志,
(?i)
只需要指定一次(并且通常在regex的开头指定,在这里很容易找到它)。如果要指定后缀的可选i
部分区分大小写,则全局标志对您没有帮助,您必须执行以下操作:示例:
相关问题 更多 >
编程相关推荐