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

时间:2017-06-13 23:56:59

标签: python regex python-2.7

我的输入数据是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

如果我对正则表达式的理解是正确的,请更正。还有什么不对。我无法弄清楚这是怎么回事。

1 个答案:

答案 0 :(得分:3)

正如上面提到的@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]

另请注意,虽然从技术上讲不是错误,但最好的做法是为类保留变量名的首字母大写。请参阅What is the naming convention in Python for variable and function names?PEP8变量命名约定。

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

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

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