我有以下字符串:
2020-10-2125Chavez and Sons
2020-05-02Bean Inc
NaNRobinson, Mcmahon and Atkins
2020-04-25Hill-Fisher
2020-04-02Nothing and Sons
52457Carpenter and Sons
0Carpenter and Sons
Carpenter and Sons
NoneEconomy and Sons
2020-04-02
我想把它分开:
myRegex = '^([-\d]{0,}|[NnaAOoEe]{0,})(.*)' or '^([0-9]{4}-[0-9]{2}-[0-9]{2,}|[\d]{0,}|[NnaAOoEe]{0,})([\D]{0,})$'
我想要所有数字,精确匹配(na,nan,none)-大写和小写以及第一组中的“”,如:
[2020-10-2125][Chavez and Sons]
[2020-05-02][Bean Inc]
[NaN][Robinson, Mcmahon and Atkins]
[2020-04-25][Hill-Fisher]
[2020-04-02][Nothing and Sons]
[52457][Carpenter and Sons]
[0][Carpenter and Sons]
[][Carpenter and Sons]
[None][Economy and Sons]
[2020-04-02][]
这是错误的:
[2020-04-02No][thing and Sons]
我想要
[2020-04-02][Nothing and Sons]
我如何编写一个正则表达式来检查像“none”这样的精确匹配——不区分大小写(也应该识别“none”、“none”等)
关于re.I的以下内容如何:
https://regex101.com/r/d4XPPb/3
说明:
(None|NaN?|[-\d]+)?
?
),因此它也匹配NA()
是可选的,因为?
意味着它可能不在那里(.*)
结尾的任何字符但是,仍然可能存在边缘情况。考虑以下事项:
将被解析为
另一种选择:
从这里我们可以继续使正则表达式变得更复杂,但是,我认为在没有正则表达式的情况下实现自定义解析会简单得多。每行和中的循环字符:
line[:4].lower() == "none" and line[4].isupper()
)line[:3].lower() == "nan" and line[3].isupper()
line[:2].lower() == "na" and line[2].isupper()
以上内容应该会产生更准确的结果,并且应该更容易阅读
示例代码:
数据:
输出:
您可以将想要匹配的表达式与一个简单的
|
组合起来,但是请记住,引擎总是会选择第一个可能的匹配;因此,您希望先放置更具体的模式,然后再返回到更一般的情况试试这个:
re.IGNORECASE
标志表示忽略大小写差异另外,注意量词
{0,}
写得更好*
;但是您希望至少需要一个匹配,或者返回到一个更通用的模式,因此实际上您需要+
(也可以写为{1,}
;但是,还是更喜欢更简洁的标准表示法)。 在已经封装字符类的\D
周围不需要方括号(但是如果您想将两个字符类(如[-\d]
)合并在一起,则需要方括号)演示:https://ideone.com/Qwp5ao
最后,请注意,用于命名局部变量的标准Python表示法更倾向于
snake_case
而不是dromedaryCase
。(另见Wikipedia。)相关问题 更多 >
编程相关推荐