如何匹配字符串的开头和结尾?

时间:2013-05-04 13:45:48

标签: regex notepad++

我正在尝试使用Notepad ++的find&替换为以下示例中的正则表达式:

 3   733xxxx (-1)
 3  1521xxxx (-1)
 3  1521xxxx (-1)

我如何才能保持以下不匹配?

733xxxx
1521xxxx
1521xxxx

我尝试过使用以下表达式:

^(.* \(-1\)).*$
^(\(-1\))$

第一个匹配所有内容,第二个匹配:没有。

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

有几种方法可以解决这个问题:

  • 用空字符串替换"^ *\d+ +"" *\(-1\)$"(引号是为了清晰起见)(2个步骤)

  • "^ *\d+ +(\d+).*$"替换为$1

\d是一个简写字符类,匹配任何[[:digit:]]匹配(数字)。 (Notepad ++使用Boost正则表达式)。从我的测试来看,似乎 它可以匹配Unicode数字 ,但我认为它不会对您的应用程序产生太大影响。

^ *\d+ +部分将匹配中间数字前面的文字。

 *\(-1\)$匹配空格和行尾的(-1)

对于^ *\d+ +(\d+).*$,正则表达式将匹配整行,然后我们将只保留我们想要的部分,即中间的数字。 ()(不像 *\(-1\)$中那样进行转义)是一个捕获组,它捕获子模式匹配的文本。我们不关心捕获的数字后面的文本,因此我们只使用.*来匹配所有内容。