2

:陈述

假设我们有以下三个记录,我们只想匹配第一个-恰好一个数字后跟一个特定的单词,可以使用什么正则表达式来制作它(在 NotePad ++ 中)?

  1. 2杯
  2. 11杯
  3. 222杯

我试过的表达方式和他们的问题是:

  • 建议 1:\d{1}杯子

它将分别在第二条和第三条记录中找到“1Cups”和“2Cups”子字符串,这是我们不想要的

  • 方案二:[^0-9]+[0-9]杯

和上面一样

(PS:记录可以是“XX 2Cups”、“YY22Cups”和“XYZ 333Cups”,即不假设匹配部件的位置)

有什么建议么?

:参考

[1] NotePad++中的reg定义(同SciTe)

正如Searching for a complex Regular Expression to use with Notepad++中所述,它是:http ://www.scintilla.org/SciTERegEx.html

[2] 匹配确切的位数

这是一个示例:正则表达式精确匹配 5 个数字

但是,我们不想在此处的较长记录中找到可匹配的子字符串。

4

5 回答 5

2

如果字符串实际上具有编号序列(1. 2Cups 2. 11Cups),则可以使用其后面的空格:

\s\d{1}Cups

如果之前没有编号列表,但字符串将位于行首,您可以将其锚定在那里:

^\d{1}Cups

在 Notepad++ v6.5.1 (Unicode) 中测试。

于 2014-02-17T01:36:00.933 回答
1

听起来您只想在字符串的开头匹配数字,或者如果它前面有空格,所以这会起作用:

(^|\b)\dCups

正则表达式可视化

调试演示

解释:

  • (^|\b)匹配字符串的开头或单词的开头(技术上,分词)
  • \d匹配一个数字({1}是多余的)
  • Cups比赛杯
于 2014-02-17T01:42:09.480 回答
0

我找到了一种可能的解决方案:

  1. 根据^\d{1}CupsKen、Cottrell 和 Bohemian 的建议,用于匹配“从一个数字 + Cups 开始”的案例。
  2. 用于[^\d]\dCups匹配其他情况。

但是,尚未找到仅使用一个正则表达式来解决问题的解决方案。

于 2014-02-17T05:55:06.247 回答
0

试一试:

(?:^|\D)\dCups

仅当之前没有数字时,这将匹配 xCups。

于 2014-02-17T08:15:56.993 回答
0

这将起作用:

\b\dCups

如果“Cups”必须是一个完整的单词(即不匹配2Cupsizes

\b\dCups\b

请注意,\b即使在输入的开始或结束时也会匹配。

于 2014-02-17T01:57:57.657 回答