捕获所有数字(拼写出来)任何大小,没有尾随/前导空格

时间:2016-06-07 21:11:35

标签: regex

我试图捕获所有可能的(拼写出来的)数字,除了我似乎无法编写一个没有尾随/前一个空格的捕获表达式。

"如果有一万六千四十六只熊"

结果:"十九万四千六十六"期望:"一万六千四十六"

当前表达:

\b((eleven|twelve|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen|twenty|thirty|forty|fifty|sixty|seventy|eighty|ninety|one|two|three|four|five|six|seven|eight|nine|ten|hundred|thousand|million|billion|trillion|and){1}([\–\-\—\‒]|\s){0,1})+\b

我也从另一个帖子测试了这个概念:

\b(?:(?:one|two|three|four|five|six|seven|eight|nine|zero)\b\s*?){4}

哪种方法效果很好,但它要求您事先知道尺寸。

任何帮助都会很棒,我真的很想抓住它。

2 个答案:

答案 0 :(得分:1)

为了避免修剪结果,而不是像下面这样编写模式:<script type="text/javascript"> $(document).ready(function() { var slider = $("#slider").slider(); // override the default "nice" function. slider.nice = function(value) { var ref_date = new Date("2005-01-01"); // each slider step is 1 day, translating to 24 * 3600 * 1000 milliseconds var slider_date = new Date(ref_date.getTime() + value * 24 * 3600 * 1000); return [slider_date.getUTCFullYear(), slider_date.getUTCMonth() + 1, slider_date.getUTCDate()].join("-"); } }) ,您可以使用以下结构:(?: item separator)+

当&#34; item&#34;很长,您可以使用此语法item (?: separator item)*引用捕获组中的子模式,其中n是捕获组的编号。例如:

(?n)

显然你也可以用(?xi) # switch on the free-spacing mode and the case-insensitive mode \b ( # capture group 1 eleven|twelve|thirt(?:y|een)|four(?:teen)?|fift(?:y|een)|six(?:teen|ty)?| seven(?:teen|ty)?|eight(?:een|y)?|nine(?:teen|ty)?|twenty|forty|one|two|three|five| ten|hundred|thousand|(?:[mb]|tr)illion ) (?> (?:[-–—‒]|\s(?:and\s)?) (?1) # call to the subpattern in the capture group 1 )* \b 代替子模式重写。

顺便说一句,如果你把它写成树并使用第一个字符识别技术,你可以将长时间交替的影响降到最低:

(?1)

demo

答案 1 :(得分:0)

您可以使用积极的预测(?= )

例如((one|two|three|four|and)[- ]{0,1})+(?= )

将匹配粗体文本而没有尾随空格。

Foo bar 一个二四和三个 yada。

如果数字文本可能位于句子的末尾,您可以将正面预测调整为(?= .)

这也将匹配粗体而没有尾随空格或“。”

Foo bar 一个二四和三个 yada。

Foo bar 一个二四和三