python正则表达式匹配数字或者逗号_将数字与正则表达式相
匹配-只有数字和逗号...
数字是多少?
我有⼀个简单的问题你的“简单”问题:你所说的“数字”到底是什么意思?是
−0⼀个号码?
你觉得
√−1?
是
⅝或
⅔⼀个号码?
是
186,282.42±0.02英⾥/秒-或者是其中的两三英⾥?
是
6.02e23⼀个号码?
是
3.141_592_653_589⼀个号码?怎么样
π,或
ℯ?和
−2π⁻³
有多少个数字
0.083?
有多少个数字
128.0.0.1?
什么号码
⚄等⼀下?怎么样
⚂⚃?
是吗?
10,5 mm⾥⾯有⼀个号码-还是有两个?
是
∛8³⼀个数字-或者是其中的三个?
什么号码
ↀↀⅮⅭⅭⅬⅫ AUC代表,2762还是2009年?
是
和
数字?
关于
0377, 0xDEADBEEF,和
0b111101101?
是
Inf⼀个号码?是
NaN?
是
④②⼀个号码?关于
?
你觉得
?
做什么
ℵ₀和
ℵ₁跟数字有关吗?或
ℝ, ℚ,和
ℂ?
建议模式
另外,你熟悉这些模式吗?你能解释⼀下每⼀种⽅法的优缺点吗?/\D/
/^\d+$/
/^\p{Nd}+$/
/
^\pN+$/
/^\p{Numeric_Value:10}$/
/^\P{Numeric_Value:NaN}+$/
/^-?\d+$/
python正则表达式不包含/^[+-]?\d+$/
/^-?\d+\.?\d*$/
/^-?(?:\d+(?:\.\d*)?|\.\d+)$/
/^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/
/^((\d)(?(?=(\d))|$)(?(?{ord$3==1+ord$2})(?1)|$))$/
/^(?:(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9] {1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}))$/
/
^(?:(?:[0-9a-fA-F]{1,2}):(?:[0-9a-fA-F]{1,2}):(?:[0-9a-fA-F]{1,2}):(?:[0-9a-fA-F]{1,2}):(?:[0-9a-fA-F]{1,2}):(?:[0-9a-fA-F]
{1,2}))$/
/^(?:(?:[+-]?)(?:[0123456789]+))$/
/(([+-]?)([0123456789]{1,3}(?:,?[0123456789]{3})*))/
/^(?:(?:[+-]?)(?:[0123456789]{1,3}(?:,?[0123456789]{3})*))$/
/^(?:(?i)(?:[+-]?)(?:(?=[0123456789]|[.])(?:[0123456789]*)(?:(?:[.])(?:[0123456789]{0,}))?)(?:(?:[E])(?:(?:[+-]?)(?: [0123456789]+))|))$/
/^(?:(?i)(?:[+-]?)(?:(?=[01]|[.])(?:[01]{1,3}(?:(?:[,])[01]{3})*)(?:(?:[.])(?:[01]{0,}))?)(?:(?:[E])(?:(?:[+-]?)(?:[01]+))|))$/
/^(?:(?i)(?:[+-]?)(?:(?=[0123456789ABCDEF]|[.])(?:[0123456789ABCDEF]{1,3}(?:(?:[,])[0123456789ABCDEF]{3})*)(?:(?: [.])(?:[0123456789ABCDEF]{0,}))?)(?:(?:[G])(?:(?:[+-]?)(?:[0123456789ABCDEF]+))|))$/
/((?i)([+-]?)((?=[0123456789]|[.])([0123456789]{1,3}(?:(?:[_,]?)[0123456789]{3})*)(?:([.])([0123456789]{0,}))?)(?:([E]) (([+-]?)([0123456789]+))|))/
我怀疑上⾯的⼀些模式可以,可能满⾜你的需要。但我不能告诉你哪⼀个或哪⼀个-或者,如果没有,提供给你另⼀个-因为你没有说过你所说的“数字”是什么意思。
如你所见,有⼀个巨⼤的数字数量的可能性:很可能是ℵ₁值,事实上。☺
建议模式的关键
下⾯列出的每个编号说明都描述了上⾯列出的相应编号模式的模式。如果有匹配的话
⾮数字字符串中的任何位置,包括像换⾏符⼀样的空格。
只有在字符串只包含数字的情况下才匹配,但尾⾏中断可能除外。请注意,数字被定义为具有属性通⽤类别⼗进制数,该数字可作为
\p{Nd}, \p{Decimal_Number},或
\p{General_Category=Decimal_Number}..这个转⾝实际上只是⼀个代码点的反映,这些代码点的数字类型类别为⼗进制,如
\p{Numeric_Type=Decimal}.
这与⼤多数regex语⾔中的2相同。这⾥的Java是⼀个例外,因为它不映射简单的charclass转义,例如
\w和
\W, \d和
\D, \s和
\S,和
\b或
\B进⼊适当的Unicode属性。这意味着您不能对Java中的任何Unicode数据使⽤这⼋个单字符转义,因为它们只在ASCII上⼯作,即使Java 总是在内部使⽤Unicode字符。
这与3略有不同,因为它不仅限于⼗进制数,⽽且可以是任何数字;也就是说,任何带有
\pN, \p{Number},或
\p{General_Category=Number}财产。这些包括
\p{Nl}或
\p{Letter_Number}⽐如罗马数字和
\p{No}或
\p{Other_Number}对于下标和下标的数字,分数和圈数-等等,就像计数棒。
这只匹配完全由⼗进制值为10的数字组成的字符串,所以如下所⽰
Ⅹ罗马数字⼗,和
⑩, ⑽, ⒑, , ❿, ➉,和
➓.
只有那些包含缺少数字值NaN的字符串;换句话说,所有字符都必须有⼀些数字值。
只匹配⼗进制数,可以选择使⽤前导连字符减号。
与7相同,但如果符号是加号⽽不是减号,现在也能⼯作。
查⼗进制数,后⾯是可选连字符减号和可选句号加上零或多个⼗进制数。
与9相同,但如果后⾯有⼀些,则不需要在点之前使⽤数字。
C和许多其他语⾔的标准浮点表⽰法,允许科学记谱.
发现只有两个或更多的⼩数组成的数字按降序排列,如987或54321。这个递归正则表达式包括对Perl代码的标注,它检查前⾯的数字是否有⼀个代码点值,它是当前数字的后继值;也就是说,它的序号值更⼤。可以在PCRE中使⽤C函数作为标注。
它查有效范围内有四个⼗进制数的有效IPv 4地址,⽐如128.0.0.1或255.255.240,但不是999.999.999.999。
这寻⼀个有效的MAC地址,所以六个冒号-分开对两个ASCII⼗六进制数字.
这查ASCII范围内带有可选引号的整数。这是匹配ASCII整数的正常模式。
这就像15,只不过它需要⼀个逗号来分隔三组。
这类似于15,只是分隔组的逗号现在是可选的。
这是在ASCII中匹配C型浮点数的正常模式.
这就像18,但需要⼀个逗号来分隔3和基-2的组,⽽不是基-10。
这是19岁,但⽤的是魔法。注意,可选指数现在由G⽽不是E表⽰,因为E是有效的⼗六进制数字。
这将检查字符串是否包含C样式的浮点数,但在它们之间使⽤可选的分组分隔符,每个逗号或下划线(低⾏)的三位数字。它还将该字符串存储到
\1捕获组,使其可作为
$1⽐赛成功后。
来源与可维护性
模式编号1,2,7-11来⾃perl的前⼀次化⾝。常见问题在问题中列出“如何验证输⼊”。该部分已被⼀项建议替换为使⽤Regexp:公共模块,由阿⽐盖尔和达⽶安·康韦..原始模式仍然可以在Perl烹饪本,“检查⼀个字符串是否是⼀个有效的数字”,它的解决⽅案可⽤于令⼈眼花缭乱的多种语⾔,包括ada、公共LISP、groovy、guile、haskell、java、merd、ocaml、php、pike、python、reexx、ruby和tcl。PLEAC项⽬.
模式12可以更清晰地重写。m{
^
(
( \d )
(?(?= ( \d ) ) | $ )
(?(?{ ord $3 == 1 + ord $2 }) (?1) | $ )
)
$}x
它⽤正则递归,它存在于许多模式引擎中,包括Perl和所有PCRE派⽣语⾔中。但它还使⽤嵌⼊式代码标注作为其第⼆种条件模式的测试;据我所知,代码标注仅在Perl和PCRE中可⽤。
模式13-21来⾃上述Regexp:公共模块。请注意,为了简洁起见,编写这些代码时都没有您在⽣产代码中绝对需要的空⽩和注释。这可能是怎么回事/x模式:$real_rx = qr{ ( # start $1 to hold entire patte
rn
( [+-]? ) # optional leading sign, captured into $2
( # start $3
(?= # look ahead for what next char *will* be
[0123456789] # EITHER: an ASCII digit
| [.] # OR ELSE: a dot
) # end look ahead
( # start $4
[0123456789]{1,3} # 1-3 ASCII digits to start the number
(?: # then optionally followed by
(?: [_,]? ) # an optional grouping separator of comma or underscore
[0123456789]{3} # followed by exactly three ASCII digits
) * # repeated any number of times
) # end $4
(?: # begin optional cluster
( [.] ) # required literal dot in $5
( [0123456789]{0,} ) # then optional ASCII digits in $6
) ? # end optional cluster
) # end $3
(?: # begin cluster group
( [E] ) # base-10 exponent into $7
( # exponent number into $8
( [+-] ? ) # optional sign for exponent into $9
( [0123456789] + ) # one or more ASCII digits into $10
) # end $8
| # or else nothing at all
) # end cluster group) }xi; # end $1 and whole pattern, enabling /x and /i modes
从软件⼯程的⾓度来看,在/x上⾯的模式版本。⾸先,有⼤量的代码重复,您可以看到相同的代码。[0123456789]如果其中⼀个序列不⼩⼼遗漏了⼀个数字,会发⽣什么情况?其次,您所依赖的是位置参数,必须对其进⾏计数。这意味着您可能会编写如下内容:(
$real_number, # $1
$real_number_sign, # $2
$pre_exponent_part, # $3
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论