定义正则表达式的结尾和开头

时间:2018-08-13 13:00:24

标签: python regex

说我有一个过程代码列表,如下所示:

  procedure_codes = ['038911.B', '32431.1', 'fdsfd.B', '13635.1B', '78935.1b']

在python中,我现在要提取所有代码:

  • 没有前导零
  • 首字符为数字
  • 其中包含“。”某个地方
  • 在“。”之后有数字的地方。
  • 不以'b'或'B'结尾的

对我来说,最合乎逻辑的方法似乎是使用正则表达式,所以我尝试了

  • ([[^ 0] +)不会选择前导零的字符串
  • (\ d +)仅选择首字符为数字的字符串
  • (。)仅选择包含“。”的字符串某个地方
  • (\ d?)仅选择在'。'之后包含数字的字符串。
  • ([[^ bB]?)不选择以'b'或'B'结尾的字符串

组合(对于列表中的每个元素):

  for i in procedure_codes:
      if re.search('[^0]\d+\.\d[^bB]?', i):
          print(i)

我怀疑python只返回代码:“ 32431.1”,但返回的是:

  • 32431.1
  • 13635.1B
  • 78935.1b

因此,最终的否定似乎被完全忽略了

由于我是刚开始使用正则表达式的新手,所以我不知道我只是在犯语法错误还是完全误解了正则表达式。

1 个答案:

答案 0 :(得分:1)

只需用^$包装您的正则表达式以分别匹配行的开头行的结尾

^[^0]\d+\.\d[^bB]?$

因为没有它们,它在13635.1中找到了13635.1B组,而在78935.1b中找到了相同的组。