我试图捕获所有可能的(拼写出来的)数字,除了我似乎无法编写一个没有尾随/前一个空格的捕获表达式。
"如果有一万六千四十六只熊"
结果:"十九万四千六十六"期望:"一万六千四十六"
当前表达:
\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}
哪种方法效果很好,但它要求您事先知道尺寸。
任何帮助都会很棒,我真的很想抓住它。
答案 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)
答案 1 :(得分:0)
您可以使用积极的预测(?= )
例如((one|two|three|four|and)[- ]{0,1})+(?= )
将匹配粗体文本而没有尾随空格。
Foo bar 一个二四和三个 yada。
如果数字文本可能位于句子的末尾,您可以将正面预测调整为(?= .)
这也将匹配粗体而没有尾随空格或“。”
Foo bar 一个二四和三个 yada。
Foo bar 一个二四和三。