首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个正则表达式,用于在用户输入答案的开头和结尾排除一个单词或字符。

一个正则表达式,用于在用户输入答案的开头和结尾排除一个单词或字符。
EN

Stack Overflow用户
提问于 2020-07-05 07:41:37
回答 2查看 388关注 0票数 4

目标:

我有一个回答框,它将接受用户的输入。为了减少输入到后端的可能正确答案的数量,我想在答案的开头和结尾使用RegExp来忽略某些单词/字符。

因此,如果答案是:山。我也会接受:.

我尝试过的:

代码语言:javascript
复制
 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‘.等等。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-05 08:04:06

因此,您需要删除一个领先的"the ""a ",以及一个尾随的复数"s"

也许:

代码语言:javascript
复制
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;
}

此检查字符串是有效答案之一,可选前缀为theaan,可选后缀为s

前面的^$ (因为它在一个非原始字符串文本中的\$)确保regexp匹配整个输入( ^匹配字符串的开头,$匹配字符串的末尾)。|要么匹配它之前的东西,要么匹配它后面的东西(“备选方案”)。

如果您想匹配更多不同的后缀,例如"es“或".",您也可以更改s?以接受这些后缀:

代码语言:javascript
复制
var re = RegExp("^(?:the | an? )?${validAnswers[i]}(?:e?s)?\\.?\$", caseSensitive: false);

我猜你想要接受ses,并且,独立于此,接受.

您的原始RegExp无效。如果它运行的话,我无法预测它会做什么。(例如,RegExp不能以?开头)。我建议阅读RegExp教程。

票数 2
EN

Stack Overflow用户

发布于 2020-07-05 09:57:23

这就是我如何结束解决问题的方式:

在开始时忽略: the,an,a忽略结尾:s,es和.

代码语言:javascript
复制
bool checkAnswer(String answer) {
  List _answers = widget.answers;
  for (var i = 0; i < _answers.length; i++) {
    var re = RegExp("^(?:the |an |a )?${_answers[i]}(?:s|es)?.?\$", caseSensitive: false);
    if (re.hasMatch(answer)) return true;
  }
  return false;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62738081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档