gpt4 book ai didi

regex - 用于排除用户输入答案开头和结尾处的单词或字符的正则表达式

转载 作者:行者123 更新时间:2023-12-03 02:42:29 26 4
gpt4 key购买 nike

目标:
我有一个可以接受用户输入的答案框。为了减少我进入后端的可能正确答案的数量,我想使用 RegExp 来忽略答案开头和结尾的某些单词/字符。
所以如果答案是:山。
我也愿意接受:一座山 ...
我试过的:

 bool checkAnswer(String answer) {
List _answers = widget.answers;

for (var i = 0; i < _answers.length; ++i) {
// This
_correctAnswer = RegExp("?!(the)|(an)|(a)?${widget.answers[i]}s?").hasMatch(answer);
if (_correctAnswer) {
return _correctAnswer;
}

}
return false;
}
此函数查看用户输入并将其与我在后端输入的答案进行比较。问题是它也接受单个字符 't,h,e'...等

最佳答案

所以你想删除一个领先的 "the ""a " , 和尾随复数 "s" .
也许:

bool checkAnswer(String answer, List<String> validAnswers) {
for (var i = 0; i < validAnswers.length; i++) {
var re = RegExp("^(?:the | an? )?${validAnswers[i]}s?\$", caseSensitive: false);
if (re.hasMatch(answer)) return true;
}
return false;
}
这将检查字符串是否是有效答案之一,可选前缀 the , a an , 并可选择以 s 为后缀.
领先 ^和尾随 $ ( \$ 因为它在一个非原始字符串文字中)确保正则表达式匹配整个输入( ^ 匹配字符串的开头, $ 匹配字符串的结尾)。 |匹配它之前的事物或它之后的事物(“替代品”)。
如果要匹配更多不同的后缀,请说“es”或“.”,则更改 s?也接受那些:
var re = RegExp("^(?:the | an? )?${validAnswers[i]}(?:e?s)?\\.?\$", caseSensitive: false);
我猜你想接受 ses并且,与此无关的是 . .
您的原创 RegExp无效。如果它运行,我无法预测它会做什么。 (例如, RegExp 不能以 ? 开头)。
我建议阅读 RegExp 教程。

关于regex - 用于排除用户输入答案开头和结尾处的单词或字符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62738081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com