首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用regex不允许非数字,但允许在Python中的点?

如何使用regex不允许非数字,但允许在Python中的点?
EN

Stack Overflow用户
提问于 2016-09-12 19:51:31
回答 4查看 112关注 0票数 0

我对正则表达式很陌生,并且尝试删除所有非数字,但保留字符串的 (.):

代码语言:javascript
复制
x = ['ABCD, EFGH ', ' 20.9&dog; ', ' IJKLM />']

到目前为止,我已经尝试了以下几点:

代码语言:javascript
复制
>>> x = re.sub("\D", "", x)
209

然而,我试图得到以下结果:

代码语言:javascript
复制
20.9

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-09-12 19:56:48

您需要一个倒字符类:

代码语言:javascript
复制
re.sub(r"[^\d.]", "", x)

请注意,[^0-9.][^\d.]并不相同,因为\d匹配的字符比0123456789多得多。

代码语言:javascript
复制
>>> print(textwrap.fill(
...    "".join(x for x in (chr(y) for y in range(0x110000))
...            if re.match(r"\d", x)),
...    break_long_words=True, width=10))
0123456789
٠١٢٣٤٥٦٧٨٩
۰۱۲۳۴۵۶۷۸۹
߀߁߂߃߄߅߆߇߈߉
०१२३४५६७८९
০১২৩৪৫৬৭৮৯
੦੧੨੩੪੫੬੭੮੯
૦૧૨૩૪૫૬૭૮૯
୦୧୨୩୪୫୬୭୮୯
௦௧௨௩௪௫௬௭௮௯
౦౧౨౩౪౫౬౭౮౯
೦೧೨೩೪೫೬೭೮೯
൦൧൨൩൪൫൬൭൮൯
෦෧෨෩෪෫෬෭෮෯
๐๑๒๓๔๕๖๗๘๙
໐໑໒໓໔໕໖໗໘໙
༠༡༢༣༤༥༦༧༨༩
၀၁၂၃၄၅၆၇၈၉
႐႑႒႓႔႕႖႗႘႙
០១២៣៤៥៦៧៨៩
᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙
᥆᥇᥈᥉᥊᥋᥌᥍᥎᥏
᧐᧑᧒᧓᧔᧕᧖᧗᧘᧙
᪀᪁᪂᪃᪄᪅᪆᪇᪈᪉
᪐᪑᪒᪓᪔᪕᪖᪗᪘᪙
᭐᭑᭒᭓᭔᭕᭖᭗᭘᭙
᮰᮱᮲᮳᮴᮵᮶᮷᮸᮹
᱀᱁᱂᱃᱄᱅᱆᱇᱈᱉
᱐᱑᱒᱓᱔᱕᱖᱗᱘᱙
꘠꘡꘢꘣꘤꘥꘦꘧꘨꘩
꣐꣑꣒꣓꣔꣕꣖꣗꣘꣙
꤀꤁꤂꤃꤄꤅꤆꤇꤈꤉
꧐꧑꧒꧓꧔꧕꧖꧗꧘꧙
꧰꧱꧲꧳꧴꧵꧶꧷꧸꧹
꩐꩑꩒꩓꩔꩕꩖꩗꩘꩙
꯰꯱꯲꯳꯴꯵꯶꯷꯸꯹
0123456789

我敢打赌你不知道印度教-阿拉伯数字系统有这么多变体。

还值得一提的是,即使在最新的3.x中,Python的正则表达式也不支持支持POSIX是命名字符类 (向下滚动到“字符类”--遗憾的是,没有锚点)。[^[:digit:].]不会做你想做的事。

票数 2
EN

Stack Overflow用户

发布于 2016-09-12 19:56:10

与使用类\D不同,您可以使用[...]定义自己的字符类,并使用[^...]转换该类。现在,只需将所有数字0-9.放入该类:

代码语言:javascript
复制
>>> x = ['ABCD, EFGH ', ' 20.9&dog; ', ' IJKLM />']
>>> [re.sub("[^0-9.]", "", y) for y in x]
['', '20.9', '']

当然,您也可以使用re.findallre.search来获取字符串中的数字或点,而不是删除所有不是数字或点的内容。这样做的好处是,如果字符串包含多个数字,则这些数字不会聚集在一起:

代码语言:javascript
复制
>>> z = "foo20.9bar42.1blub"
>>> re.sub("[^0-9.]", "", z)
'20.942.1'
>>> re.findall("[0-9.]+", z)
['20.9', '42.1']
票数 2
EN

Stack Overflow用户

发布于 2016-09-12 19:56:19

这是一个可以明确表示的简单要求:

代码语言:javascript
复制
for item in x:
    print re.sub(r'[^0-9.]', "", item)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39457780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档