【问题标题】:Regular expression matching and remove spaces正则表达式匹配和删除空格
【发布时间】:2021-10-04 08:58:24
【问题描述】:

请问如何使用正则表达式获取地址:

地址 123 Mayor Street, LAG ABC 分行

使用(?<=Address(\s))(.*(?=\s)),但它包含“地址”后面的空格。试图获得一个表达式来提取不带空格的地址。 (“地址”后“123”前有几个空格)

谢谢!

【问题讨论】:

  • 没有空格的值在第2组
  • 你的正则表达式看起来已经正确了...?
  • 模式要求是什么?你怎么知道我们需要在Branch ABC 而不仅仅是ABC 之前停下来?您只提供了左侧边界,Address + 之后的空格。另外,您使用的编程语言/工具是什么?请分享您的相关代码部分,展示您如何使用正则表达式。
  • @Thefourthbird 我得到的结果在 123 之前有空格
  • @Thefourthbird 你可以回答这个问题,我相信。

标签: regex match


【解决方案1】:

您尝试的模式 (?<=Address(\s))(.*(?=\s)) 断言 Address 后跟一个左侧的空白字符,然后匹配该行的其余部分断言右侧的空白字符。

对于示例数据,它将在字符串中最后一个空白字符之前匹配,并且匹配还将包含在 Address 之后出现的所有空白字符


匹配问题中粗体部分的一个选项是使用捕获组。

\bAddress\s+([^,]+,\s*\S+)

模式匹配:

  • \bAddress\s+ 匹配地址后跟 1+ 个空白字符
  • ( 捕获第 1 组
    • [^,]+, 匹配除 , 之外的任何字符的 1+ 次出现,然后匹配 ,
  • \s*\S+ 匹配可选的空白字符,后跟 1+ 个非空白字符
  • )关闭第一组

.NET regex demo点击表格标签查看第 1 组的值)

注意\s[^,]也可以匹配换行符

具有正向后视功能的变体仅获得匹配:

(?<=\bAddress\s+)[^,\s][^,]+,\s*\S+

.NET Regex demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 2017-04-05
    • 1970-01-01
    相关资源
    最近更新 更多