【问题标题】:Regex pattern to split based on first and last words正则表达式模式根据第一个词和最后一个词进行拆分
【发布时间】:2018-09-05 17:34:39
【问题描述】:
address='''No-33-6,BEML Layout,Basaveshwaranagara 8th Main,Kamala Nagar,Near Academy Of Science and Knowledge,Bengaluru,Karnataka 560079'''

我尝试使用以下模式。但是 .* 匹配所有字符

re.findall('[n][o].*',adress)

根据第一项为 No 和最后一项 6 位密码/邮政编码进行匹配

output:No-33-6,BEML Layout,Basaveshwaranagara 8th Main,Kamala Nagar,Near Academy Of Science and Knowledge,Bengaluru,Karnataka 560079

【问题讨论】:

  • 我试过这个 re.findall('[N][o].*',address) 但它似乎与最后的数字不匹配
  • 用我试过的解决方案更新了问题
  • 如果第一个单词以No开头,最后一个单词以数字(6位)结尾,则输出从第一个单词到最后一位的整数

标签: python regex nlp


【解决方案1】:

如果我正确理解您的查询,您希望匹配以

开头的字符串模式

没有

并以最后一个词结束 6 位 pincode/zipcode

即560079

以及介于两者之间的所有文本。

您可以通过以下方式实现:

import re
address='''No-33-6,BEML Layout,Basaveshwaranagara 8th Main,Kamala Nagar,Near Academy Of Science and Knowledge,Bengaluru,Karnataka 560079'''
matches = []
matches = re.findall(r'\b(?=No)(.*)\b(\d{6,})\b', address)

这会返回:

[('No-33-6,BEML Layout,Basaveshwaranagara 8th Main,Kamala Nagar,Near Academy of Science and Knowledge,Bengaluru,Karnataka','560079')]

请看这里:https://regex101.com/r/2pXcMI/4

【讨论】:

  • 它有效。感谢提到的链接。这对我很有帮助。
  • 感谢您告诉我。如果您满意,如果您能接受答案,我将不胜感激:)
  • 如果您满意,别忘了接受答案 :) 当然给它时间,但我想有很多方法可以使用正则表达式来实现。
【解决方案2】:

下面的呢?

([N][o]).*\b([0-9].....).*?$

这对你有用吗?应该根据您尝试的正则表达式匹配第一个单词,然后捕获地址中的最后 6 位数字。你可以在这里测试https://regex101.com

【讨论】:

    【解决方案3】:
    re.findall('/No.+\d+/g', string_to_search)
    

    从头到尾:

    首先我们要匹配前缀“No”,所以我们只需使用不带括号或方括号的两个字母。

    接下来我们必须确保在数字后缀。在大多数情况下,这个数字的长度不会改变,但是我的答案包含了一种用于任何长度整数的方法。

    如果两者都存在,则匹配为真。

    因此我们想收集里面的所有信息。这是通过.+ 完成的,意思是“一个或多个字符,换行符除外”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-30
      相关资源
      最近更新 更多