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+$/
/^[+-]?\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 pattern
( [+-]? ) # 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
$pre_decimal_point, # $4
$decimal_point, # $5
$post_decimal_point, # $6
$exponent_indicator, # $7
$exponent_number, # $8
$exponent_sign, # $9
$exponent_digits, # $10) = ($string =~ /$real_rx/);
坦白地说,这是令人憎恶的!很容易弄错编号,很难记住什么符号名称会出现在哪里,写起来也很乏味,特别是在不需要所有这些内容的情况下。将其重写为使用命名组而不是仅编号组。同样,我将对变量使用Perl语法,但是模式的内容应该在任何支持命名组的地方工作。use 5.010; # Perl got named patterns in 5.10$real_rx = qr{
(?
# optional leading sign
(? [+-]? )
(?
(?= # look ahead for what next char *will* be
[0123456789] # EITHER: an ASCII digit
| [.] # OR ELSE: a dot
) # end look ahead
(?
[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
(?: # begin optional anon cluster
(? [.] ) # required literal dot
(?
[0123456789]{0,} )
) ? # end optional anon cluster
) # end
# begin anon cluster group:
(?:
(? [E] ) # base-10 exponent
(? # exponent number
(? [+-] ? )
(? [0123456789] + )
) # end
| # or else nothing at all
) # end anon cluster group
) # end }xi;
现在命名了抽象,这很有帮助。你可以按名字把小组拉出来,你只需要那些你关心的人。例如:if ($string =~ /$real_rx/) {
($pre_exponent, $exponent_number) =
@+{ qw };}
还有一件事要做这个模式,以使它更易于维护。问题是,仍然有太多的重复,这意味着它太容易改变在一个地方,而不是在另一个地方。如果你在做McCabe分析,你会说它的复杂性度量太高了。我们大多数人都会说它太缩了。这就很难理解了。要解决所有这些问题,我们需要的是一个“语法模式”,一个带有定义块来创建命名抽象的模式,然后我们将其处理得有点像匹配中的子例程调用。use 5.010; # Perl first got regex subs in v5.10$real__rx = qr{
^ # anchor to front
(?&real_number) # call &real_number regex sub
$ # either at end or before final newline
##################################################
# the rest is definition only; think of ##
# each named buffer as declaring a subroutine ##
# by that name ##
##################################################
(?(DEFINE)
(?
(?&mantissa)
(?&abscissa) ?
)
(?
(?&exponent_indicator)
(?&exponent)
)
(?
(&?sign) ?
(?&a_digit) +
)
(?
# expecting either of these....
(?= (?&a_digit)
| (?&point)
)
(?&a_digit) {1,3}
(?: (?&digit_separator) ?
(?&a_digit) {3}
) *
(?: (?&point)
(?&a_digit) *
) ?
)
(? [.] )
(? [+-] )
(? [_,] )
(? [Ee] )
(? [0-9] )
) # end DEFINE block}x;
看看如何疯狂的更好语法模式是否比原来的行噪模式更好?正确的语法也要容易得多:我输入时甚至没有一个需要纠正的regex语法错误。(好吧,我也输入了所有其他的语法错误,但我已经这样做了一段时间了。)*)
语法模式看上去更像一个BNF,而不是人们所讨厌的丑陋的旧正则表达式。它们更容易读、写和维护。所以我们不要再有丑陋的模式了,好吗?
python正则表达式匹配数字或者逗号_将数字与正则表达式相匹配-只有数字和逗号...相关推荐
- java 数字 下划线_为什么要在Java SE 7的数字中使用下划线-在数字文字中使用下划线...
java 数字 下划线 JDK 1.7发行版引入了几个有用的功能,尽管其中大多数都是语法糖,但使用该功能可以大大提高可读性和代码质量. 这样的功能之一是在数字文字中引入下划线 . 从Java 7开始, ...
- python计算身份证最后一位数字代表什么_身份证最后一位X代表什么数字
展开全部 X的意思其实是10,只不过用罗马数字代替32313133353236313431303231363533e58685e5aeb931333365663431了而已,如果不用罗马数字代替的话, ...
- vlookup匹配值不唯一_数据对比、数据查询匹配Vlookup函数3种常见错误及解决方案...
Excel中的Vlookup函数,在大家日常数据处理计算中应用的机会非常多,因为它可以帮助我们完成数据查询匹配.数据对比.但是这个函数在使用的过程中也经常会遇到查询错误的问题.根据实践经验总结,发现主 ...
- 2 未匹配到任何借口_拼多多【关键词精确匹配溢价】给你想要的精准流量,让你订单暴增的秘诀...
关键词匹配方式升级啦,开启精确匹配溢价功能,拥有更多精准流量.为帮助商家解决在使用多多搜索时,遇到的关键词流量不精准.流量不可控.点击率低的问题,多多搜索新推出[关键词精确匹配溢价]功能.通过精确匹配 ...
- 深度学习数字仪表盘识别_【深度学习系列】手写数字识别实战
上周在搜索关于深度学习分布式运行方式的资料时,无意间搜到了paddlepaddle,发现这个框架的分布式训练方案做的还挺不错的,想跟大家分享一下.不过呢,这块内容太复杂了,所以就简单的介绍一下padd ...
- mysql 匹配多个字符_在MySQL语句中,可以匹配0个到多个字符的通配符是____。
[单选题]显示世界中客观存在并能相互区别的事物称为( ). [单选题]U7- plate [单选题]これはノートですか.雑誌ですか.( ) [多选题]会计监督是对企业经济活动的( )所进行的监督,与会 ...
- python中的关键词final_在Python中,将列表中的关键字与一行单词相匹配
我需要从下面的两行中提取一些具体的例子.在[40.748330000000003, -73.878609999999995] 6 2011-08-28 19:52:47 Sometimes I wis ...
- 【vue 项目】表单正则表达式校验1-32位,中文、英文、数字及特殊字符_-,必须以中文或英文字符开头等
验证内容 (1)1-32位,中文.英文.数字及特殊字符_-,必须以中文或英文字符开头 (2)1-32位,中文.英文.数字及特殊字符_-,必须以中文.英文.数字开头 data() {// 表单自定义校验 ...
- 符号库匹配不对的原因_中频点焊机焊接螺母有流渣是什么原因造成的?-苏州安嘉...
中频点焊机焊接螺母有流渣是什么原因造成的?主要的原因是输入热量过大,焊接区域金属熔化溢流出产生的:中频点焊机焊接螺母有流渣是螺母焊接过程中常见的问题,也是使用过程最需要避免出现的问题,因为这影响到螺栓 ...
- python 正则表达式匹配数字或者小数点_用正则表达式匹配浮点数
在这个例子中,我将向你展示如何避免不熟悉正则表达式的人常犯的一些错误.我们将尝试建立一个可以匹配浮点数的正则表达式.我们的正则表达式也应该匹配整数,以及整数部分(即0)没有给出来的浮点数. 乍看之下, ...
最新文章
- vector 容器 动态数组总结
- linux Makefile引用与环境变量
- python开发windows界面_electron作为python界面开发入门
- php关闭当前页_php如何直接关闭页面注销SESSION
- 计算机操作系统》第06章在线测试,《计算机操作系统》第06章在线测试
- linux命令行安装vnc_CentOS下安装VNC并设置远程服务
- get、post请求参数乱码解决方法(qq:1324981084)
- 《计算机系统:核心概念及软硬件实现(原书第4版)》——1.4数据库系统
- python的range和linspace
- Kudu:支持快速分析的新型Hadoop存储系统
- 三调与二调图斑叠加分析,筛选不同地类面积占比,筛选举证图斑
- 海康威视录像机(DVR)卡在开机画面
- ElementUI导入Excel文件
- uploadify---jQuery多文件上传
- 使用Arduino控制TB6600步进电机驱动器教程(更新于 2022.03.19)
- windows10下激活conda环境报错CommandNotFoundError: Your shell has not been properly configured to use conda
- 软件测试工程师的前景如何,软件测试工程师工资一般多少,前景怎么样
- Echarts清空图表:There is a chart instance already initialized on the dom.
- 夜空中的守望者的目光
- 从异常堆栈中还原 ProGuard 混淆过的代码