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

4

我的输入数据已经使用UTF-8编码。

我在输入上应用了一个正则表达式,以查找逗号前的所有内容。
然而,我的正则表达式返回了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

请纠正我对正则表达式的理解,如果我理解不正确,请指出错误。我无法弄清楚这个问题的具体原因。


4
从您的标题来看,您是想在第一个逗号处拆分字符串吗?如果您只是想做到这一点,您可以获取您的字符串并调用split使用','作为参数,但是提供第二个参数给split作为'maxsplit',这将只拆分该字符串那么多次。所以 -> s.split(',', maxsplit=1),然后您将得到一个列表,您只需要获取列表中的第一个元素即可。 - idjaw
最终,您需要传递逗号而不是空格,以实现答案。 - idjaw
1
感谢您的帮助。 - ds_user
1个回答

6
正如上面@idjaw所建议的那样,更简单的实现方法是使用split()函数:
my_string = 'Unit 5/165,Elizabeth Palace'
ans = my_string.split(',', 1)[0]  # maxsplit = 1; 
print ans  

结果:
单元 5/165

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

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

此外,请注意,虽然不是技术上的错误,但为类保留首字母大写变量名称被认为是最佳实践。请参见Python中变量和函数名称的命名约定是什么?PEP8变量命名约定。
正则表达式解决方案:
我注意到在您的示例结果中,当逗号后面有空格时(在要分析的字符串中),您得到了预期的结果。
但是,当逗号后面没有空格时,您的正则表达式返回“None”。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接