正则表达式匹配浮点数或十进制数

正则表达式匹配浮点数或十进制数

为了熟悉 latex3 语法,我编写了一个小宏来转换长度(在 LaTeX 中已知)。

我在最后的 source3.pdf 第 206 页(229)发现了以下内容:

[+ - \ ] * ((? i) nan | inf | (\ d + | \ d * \. \ d +) (\ * e [+ - \ ] *
\ d +)?) \ *

但是如果我在宏中使用它,我会收到一条错误消息:

Range [+ -  ] out of order in character class.

似乎带空格的反斜杠解释不正确。但如果我替换

[+ -\ ] with [+ -?]

那么它似乎有效了。

这里的正确输入应该是什么?

我很高兴得到提示。

在此处输入图片描述

\documentclass{article}
\usepackage{siunitx}
\sisetup{group-separator={\,},output-decimal-marker={,}}

\ExplSyntaxOn
\NewDocumentCommand { \convertlength } { O{} m m }
 {
   \tl_set:Nn \l_convert_length_tl { #2 }
   \regex_replace_all:nnN { [+-?]*((?i)nan|inf|(\d+|\d*\.\d+)(\ *e[+-?]*\d+)?)\ * } { \c{num}\cB\{ \0 \cE\}\c{,} } \l_convert_length_tl
   \ensuremath{ \text{ \tl_use:N \l_convert_length_tl }  =  \num[#1] { \dim_to_decimal_in_unit:nn { #2 } { 1#3 } } \,\text{ #3 } }
 }
\ExplSyntaxOff

\begin{document}

\convertlength{1.5in}{cm} % cm mm nd pt dd bp in

\end{document} 

相关内容