我希望在一个大文件中找到符合以下基本条件的模式:“ 1.2”(即数字点号)
在以下情况下,它也应该返回true:“ 1.2.2”或“ 1.2.a”或“ texttext1.2.3text文本”或“ text2.3textext”
我在导入python3
模块的re
程序中编写了以下查询:
re.compile(r"^\d*[.]?\d*$")
但是,问题在于,对于诸如“ 112231”之类的数字,它也返回true。
如何修复我的正则表达式?
答案 0 :(得分:2)
您要匹配一个数字,后跟一个点,然后再匹配另一个数字。
使用
r"\d\.\d"
请参见regex demo。
在Python中,要检查字符串是否与模式匹配,请使用
m = re.search(r"\d\.\d", s)
if m:
print("Matched!")
关于Unicode的注释:Python 3.x正则表达式中的\d
也将匹配所有Unicode数字,例如那些(示例):
0٠۰߀०০੦૦୦௦౦೦൦๐໐༠០᠐᧐᱐꘠01١۱߁१১੧૧୧௧౧೧൧๑໑༡១᠑᧑᱑꘡12٢۲߂२২੨૨୨௨౨೨൨๒໒༢២᠒᧒᱒꘢23٣۳߃३৩੩૩୩௩౩೩൩෩๓໓༣៣᠓᧓᱓꘣34٤۴߄४৪੪૪୪௪౪೪൪๔໔༤៤᠔᧔᱔꘤45٥۵߅५৫੫૫୫௫౫೫൫෫๕໕༥៥᠕᧕᱕꘥56٦۶߆६৬੬૬୬௬౬೬൬๖໖༦៦᠖᧖᱖꘦67٧۷߇७৭੭૭୭௭౭೭൭෭๗໗༧៧᠗᧗᱗꘧78٨۸߈८৮੮૮୮௮౮೮൮๘໘༨៨᠘᧘᱘꘨89٩۹߉९৯੯૯୯௯౯೯൯෯๙໙༩៩᠙᧙᱙꘩9
为避免这种情况,请将re.A
or re.ASCII
flag传递给re.search
或re.compile
方法。或者,使用[0-9]
代替\d
。