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

ds_*_*ser 4 python regex python-2.7

我的输入数据是 utf8 编码的。

我在输入上应用正则表达式来查找逗号之前的所有内容。
然而我的正则表达式返回None,尽管我可以直观地看到逗号。

它出什么问题了?
我测试了 if ','in 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,
Run Code Online (Sandbox Code Playgroud)

根据我的正则表达式 - 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,
Run Code Online (Sandbox Code Playgroud)

但我得到的是:

 ID            MyString
765427       Units G2 and G3,
207162       None
47568        Unit 766 - 767 Gate 7,
15498        None
Run Code Online (Sandbox Code Playgroud)

如果我对正则表达式的理解正确,请纠正。不然怎么了。我不明白这有什么问题。

She*_*man 6

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

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

结果:
Unit 5/165

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

ans = my_string.split(',')[0]
Run Code Online (Sandbox Code Playgroud)

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

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

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

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