正则表达式匹配不能分隔值和文本

时间:2010-12-27 13:50:55

标签: .net regex f#

            let IntAndString value = 
                let (|Match|_|) pattern input =
                    let m = Regex.Match(input, pattern) in
                    if m.Success then Some ([ for g in m.Groups -> g.Value ]) else None
                match value with
                    | Match "(\d+)(\w+)" x  -> Some(x)
                    //| Match "(\w+)" x       -> Some(x)
                    | Match "(\d+)" x       -> Some(x @ ["items"])
                    | _                     -> None     

所以我想要

10a   -> 10 , a  it works 
100a  -> 100 , a doesn't works - no idea why
100   -> 100 , items doesn't works

为什么100a - > 100,a不起作用,怎么才能实现呢?

2 个答案:

答案 0 :(得分:2)

如果我正确地理解了你的问题,那么当字符串只包含数字时(第一个存在数字后跟字母)时,你需要使用第二个匹配子句。

问题是\w类显然也包含数字(您可以使用简单模式尝试),因此当您将10\d\w匹配时,引擎会指定{{1} {}} 1\d 0

您可以尝试这样简单的事情:

\w

regular expressions的文档应该解释您遇到的行为。

答案 1 :(得分:0)

尝试类似的东西     匹配“(\ d +)(\ w *)” '因为+表示1次或更多次。 *表示0次或更多次。