android - 句子或问题的正则表达式

标签 android regex pattern-matching

        String regex ="((?:get|what is) number)";
        Pattern pattern = Pattern.compile(regex);       
        String text ="what is the number";
        Matcher matcher = pattern.matcher(text);
        boolean flag= matcher.matches();
        Log.i("===matches or not??","==="+flag);

所以文本可能是“获取号码”、“获取号码”、“号码是多少”、“号码是多少”、“告诉我号码”、“给我号码”

我的代码适用于“获取号码”和“什么是号码” 其中“the”是可选的。而且我无法添加“上述正则表达式中的可选字段”

因此,如果我输入“数字是多少”,它将返回 false。

最佳答案

你可以添加一个可选的组,单词 (?:\s+the)?:

String regex ="((?:tell me|g(?:et|ive me)|what(?:\\s+i|')s)(?:\\s+the)?\\s+number)";
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);       
String text ="what is the number";
Matcher matcher = pattern.matcher(text);
boolean flag= matcher.matches();

参见 Java demo online .

图案看起来像

((?:tell me|g(?:et|ive me)|what(?:\s+i|')s)(?:\s+the)?\s+number)
                                           ^^^^^^^^^^^ 

请注意,我用 \s+ 替换了空格以匹配任何 1+ 个空白字符,并使用 Pattern.CASE_INSENSITIVE 标志编译正则表达式以启用不区分大小写的匹配。我还添加了替代项以匹配输入字符串的更多变体。

参见 regex online demo .

关于android - 句子或问题的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49127008/

相关文章:

python - 正则表达式匹配之间的字符串列表

java - 分割用户模式匹配器

bash - awk 只打印 (0, 1) if pattern,但我想打印模式

android - 来自 android 传感器的 -Z 轴的偏航俯仰滚动

android - 如何制作图像并将其显示在下一页

java - 理解 ORMLite

javascript - 如何在 JavaScript 中转义反斜杠?

javascript - 在移动 Chrome 中启动 HTML5 音频播放可以接受哪些事件

regex - 在 PowerShell 中测试字符串

c# - C#7 中的 var 模式有什么好处?