繁体   English   中英

正则表达式-在第一个逗号之前获取所有内容-python

[英]Regex - get everything before first comma - python

我将输入数据编码为utf8。

我正在对输入应用正则表达式以查找逗号前的所有内容。
但是我的正则表达式返回None ,尽管我可以在视觉上看到逗号。

它出什么问题了?
我测试了MyString ','是否正常。

这是我的输入数据:

 ID            MyString
765427       Units G2 and G3, kings Drive
207162       Unit 5/165,Elizabeth Palace
47568        Unit 766 - 767 Gate 7,Jacks Way,
15498        Unit F, Himalayas Street,

根据我的正则表达式re.search(r".*?,", s['MyString'])
我希望我的输出是:

 ID            MyString
765427       Units G2 and G3,
207162       Unit 5/165,
47568        Unit 766 - 767 Gate 7,
15498        Unit F,

但是我得到的是:

 ID            MyString
765427       Units G2 and G3,
207162       None
47568        Unit 766 - 767 Gate 7,
15498        None

如果我对正则表达式的理解正确,请更正。 否则怎么了。 我不知道这是怎么了。

如上面@idjaw所建议的,一种更简单的方法是使用split()函数:

my_string = 'Unit 5/165,Elizabeth Palace'
ans = my_string.split(',', 1)[0]  # maxsplit = 1; 
print ans  

结果:
Unit 5/165

您甚至maxsplit=1参数,在这种情况下:

ans = my_string.split(',')[0]

另外,请注意,尽管从技术上讲不是错误,但保留类的变量名的首字母大写被认为是最佳实践。 请参阅Python中变量和函数名称的命名约定是什么? PEP8变量命名约定。

正则表达式解决方案:
我注意到在示例结果中,当逗号(在要分析的字符串中)后有空格时,您可以得到预期的结果。
但是,当逗号后没有空格时 ,您的正则表达式将返回“ None”。

尝试使用正则表达式模式(.*?,)而不是.*?,

这是用于调试和测试正则表达式的几个在线工具:
http://pythex.org/
https://regex101.com/
(可以选择为您生成代码,尽管它可能比必要的更为冗长)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM