首页 > 解决方案 > 需要正则表达式是非贪婪的

问题描述

问题:如何获得正则表达式通配符以仅在两个最近的元素之间进行选择,而不是继续选择更多相似的元素?<br>
我有一个很长的名字列表,需要用制表符将姓氏与其他名字分开。为了做到这一点,我在每行返回之前插入了一个占位符 (#),并将名称中的所有空格替换为不同的占位符 (@) 以供我的正则表达式参考。这些名字都是第一个,中间名首字母,然后是最后一个,在中间名首字母的每一侧都有一个空格。因此,插入占位符后,列表如下所示(简短示例):<br> Edward@C.@Sellner# <br> James@J.@Megivern# <br> J.@Philip@Newell# <br > <br> 我只需要隔离 @ 和 # 占位符之间的姓氏。当我尝试这样做时,我的正则表达式将转到第一个 @ 占位符,而不是在姓氏之前的第二个 @ 占位符处停止。这是我在搜索中使用的内容: <br> @([\s\S]*?)# <br> 我将替换为: <br> (tab)$1# <br> 之后我将转换所有占位符恢复到原来的状态。<br>
我应该在这里做些什么不同的事情?<br>
谢谢。

标签: regex

解决方案


您可以使用

@([^@#]*)#

查看正则表达式演示

细节

  • @- 一个@字符
  • ([^@#]*)- 第 1 组:0 个或更多字符,除了@and#
  • #- 一个#字符。

请参阅正则表达式图

在此处输入图像描述


推荐阅读