gpt4 book ai didi

有效 SI 单位的正则表达式(国际单位制)

转载 作者:行者123 更新时间:2023-12-03 23:18:46 24 4
gpt4 key购买 nike

我正在寻找一个正则表达式来检查 http 表单中的有效 SI 单位输入。例如,
kg/m^3
对密度或
m/s^2
为加速。

似乎是在一些开放图书馆中可能已经解决的那种问题;或者可能有一种聪明的方法可以从一组有限的基本单位开始。它适用于要求用户遵循特定输入规则的学术环境。

最佳答案

纯正则表达式解决方案有点不雅,因为它必须多次重复捕获以适应乘法和除法:

(?x)
( # Capture 1: the entire matched composed unit string
( # Capture 2: one unit including the optional prefix
(Y|Z|E|P|T|G|M|k|h|da|d|c|m|µ|n|p|f|a|z|y)? # Capture 3: optional prefix, taken from http://en.wikipedia.org/wiki/SI_prefix
(m|g|s|A|K|mol|cd|Hz|N|Pa|J|W|C|V|F|Ω|S|Wb|T|H|lm|lx|Bq|Gy|Sv|kat|l|L) # Capture 4: Base units and derived units w/o °C, rad and sr, but with L/l for litre
(\^[+-]?[1-9]\d*)? # Capture 5: Optional power with optional sign. \^0 and \^-0 are not permitted
| # or
1 # one permitted, e.g. in 1/s
)
(?: # Zero or more repetitions of one unit, plus the multiplication sign
·( # Capture 6: one unit including the optional prefix
(Y|Z|E|P|T|G|M|k|h|da|d|c|m|µ|n|p|f|a|z|y)? # Capture 7
(m|g|s|A|K|mol|cd|Hz|N|Pa|J|W|C|V|F|Ω|S|Wb|T|H|lm|lx|Bq|Gy|Sv|kat|l|L) # Capture 8
(\^[+-]?[1-9]\d*)? # Capture 9
| # or
1 # one permitted, e.g. in 1/s
)
)*
(?: # Optional: possibly multiplied units underneath a denominator sign
\/( # Capture 10
(Y|Z|E|P|T|G|M|k|h|da|d|c|m|µ|n|p|f|a|z|y)? # Capture 11
(m|g|s|A|K|mol|cd|Hz|N|Pa|J|W|C|V|F|Ω|S|Wb|T|H|lm|lx|Bq|Gy|Sv|kat|l|L) # Capture 12
(\^[+-]?[1-9]\d*)? # Capture 13
| # or
1 # one permitted, e.g. in 1/s
)
(?: # Zero or more repetitions of one unit, plus the multiplication sign
·( # Capture 14
(Y|Z|E|P|T|G|M|k|h|da|d|c|m|µ|n|p|f|a|z|y)? # Capture 15
(m|g|s|A|K|mol|cd|Hz|N|Pa|J|W|C|V|F|Ω|S|Wb|T|H|lm|lx|Bq|Gy|Sv|kat|l|L) # Capture 16
(\^[+-]?[1-9]\d*)? # Capture 17
| # or
1 # one permitted, e.g. in 1/s
)
)*
)?
)

我把升作为一个单位,即使它不是一个 SI 单位。我还需要标准的乘号。如果需要,您可以修改它。如果您从几个基本字符串构造正则表达式,则更容易掌握:
prefix = "(Y|Z|E|P|T|G|M|k|h|da|d|c|m|µ|n|p|f|a|z|y)"
unit = "(m|g|s|A|K|mol|cd|Hz|N|Pa|J|W|C|V|F|Ω|S|Wb|T|H|lm|lx|Bq|Gy|Sv|kat|l|L)"
power = "(\^[+-]?[1-9]\d*)"
unitAndPrefix = "(" + prefix + "?" + unit + power + "?" + "|1" + ")"
multiplied = unitAndPrefix + "(?:·" + unitAndPrefix + ")*"
withDenominator = multiplied + "(?:\/" + multiplied + ")?"

正则表达式不做任何一致性检查,当然,它也接受诸如 kg^-1·kg^-1·1/kg^-2 之类的东西是有效的。

当然,您可以根据需要修改正则表达式,例如通过使用 *作为乘法字符等。

关于有效 SI 单位的正则表达式(国际单位制),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3570748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com