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不起作用,怎么才能实现呢?
答案 0 :(得分:2)
如果我正确地理解了你的问题,那么当字符串只包含数字时(第一个存在数字后跟字母)时,你需要使用第二个匹配子句。
问题是\w
类显然也包含数字(您可以使用简单模式尝试),因此当您将10
与\d\w
匹配时,引擎会指定{{1} {}} 1
和\d
0
。
您可以尝试这样简单的事情:
\w
regular expressions的文档应该解释您遇到的行为。
答案 1 :(得分:0)
尝试类似的东西 匹配“(\ d +)(\ w *)” '因为+表示1次或更多次。 *表示0次或更多次。