【问题标题】:Regex - get everything before first comma - python正则表达式 - 在第一个逗号之前获取所有内容 - python
【发布时间】:2017-11-15 22:17:38
【问题描述】:

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

如果我对正则表达式的理解正确,请更正。不然怎么回事。我不知道这有什么问题。

【问题讨论】:

  • 从您的标题中,您是否只想在第一个逗号处拆分字符串?如果这就是你想要做的,你可以只用你的字符串并在字符串上调用split for ',',但将第二个参数提供给split 作为'maxsplit',它只会拆分字符串很多次。所以 -> s.split(',', maxsplit=1),那么你会得到一个列表,你只需要获取列表中的第一个元素。
  • 最终,this 回答但您想传递逗号而不是空格
  • 感谢您的帮助

标签: python regex python-2.7


【解决方案1】:

正如上面@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/
(可以选择为您生成代码,尽管它可能比必要的更冗长)

【讨论】:

  • 是的。这就是问题所在。
猜你喜欢
  • 2016-11-08
  • 1970-01-01
  • 2019-01-10
  • 1970-01-01
  • 2022-11-07
  • 1970-01-01
  • 2021-02-10
  • 2022-01-05
  • 1970-01-01
相关资源
最近更新 更多