我正在构建RiveScript的chatbot子集,并尝试使用正则表达式构建模式匹配解析器。哪三个正则表达式匹配以下三个例子?
ex1: I am * years old
valid match:
- "I am 24 years old"
invalid match:
- "I am years old"
ex2: what color is [my|your|his|her] (bright red|blue|green|lemon chiffon) *
valid matches:
- "what color is lemon chiffon car"
- "what color is my some random text till the end of string"
ex3: [*] told me to say *
valid matches:
- "Bob and Alice told me to say hallelujah"
- "told me to say by nobody"
通配符表示任何非空文本都可以接受。
在示例2中,[ ]
之间的任何内容都是可选的,( )
之间的任何内容都是替代选项,每个选项或替代选项都以|
分隔。
在示例3中,[*]
是可选的通配符,表示可以接受空白文本。
答案 0 :(得分:2)
https://regex101.com/r/CuZuMi/4
I am (?:\d+) years old
https://regex101.com/r/CuZuMi/2
what color is.*(?:my|your|his|her).*(?:bright red|blue|green|lemon chiffon)?.*
https://regex101.com/r/CuZuMi/3
.*told me to say.*
我主要使用两件事:
(?:)
非捕获组,将事物分组在一起,就像在数学上使用括号一样。.*
匹配任何字符0次或更多次。可以由{1,3}
替换为1到3次匹配。您可以通过*
兑换+
以匹配至少1个字符,而不是0。
非捕获组之后的?
使该组可选。
这些是你开始的黄金地方: