regex - 如何将正则表达式中的组与非捕获组组合以具有所有可选
问题描述
我想要实现的目标:我想将用户输入的句子与我的模板进行匹配,并查看哪个模板匹配得更好(模板中尽可能多的组)。
我正在构建以解决示例的正则表达式:
^(\bMyCompany1\b)?(?:.+)?\s(\bestablishes\b)?(?:.+)?\s(\bAnotherCompany\b)?(?:.+)?$
例句:
'MyCompany1 establishes AnotherCompany'
- 匹配所有 3 个组。没问题'MyCompany1 establ AnotherCompany'
- 匹配第一组和最后一组。忽略中间的错字。也可以'MyCompany1 establishes AnotherCompany '
- 空间到底。无法识别 2 组和 3 组。我不明白为什么'MyCompany1 establishes AnotherCompany'
- 单词“建立”后的附加空格。由于某种原因不再检测第二组
这个正则表达式只是一个模板的一个例子。每个模板我将有 1 个正则表达式(动态构建)。就像“User1 向 User2 发送了请求”、“Company1 向 Company2 借了 111 美元”一样,我的想法是定义模板的每个部分并查看我匹配了多少部分。例如,在我的示例中: - 我希望列表中的某些公司名称(MyCompany 或 MyCompany1)或非捕获组忽略其余部分(可能用户打错字或只是输入但尚未完成) - 我希望组的顺序相同到那里
你能解释一下我在正则表达式中做错了什么吗?通过使用正则表达式来实现这一点是否正确?
解决方案
你能试试下面的正则表达式吗
^(\bMyCompany1\b)?\s+(\bestablishes\b)?\s+(\bAnotherCompany\b)?(?:.+)?$
希望能帮助到你
推荐阅读
- android - 如何使用来自 Activity 的数据更新小部件?
- asp.net-mvc - 如何在视图中使用 MVC 绑定选定的单选按钮值
- python - Pandas append() 和删除重复项会弄乱索引
- buildfire - 根据文档和 API 配置的 SSO 在 Postman 上运行良好,但只会在实际应用程序和模拟器上出错
- angular - 避免打字稿索引签名
- symfony - Symfony 4 - Webpack Encore 的一些困难
- java - Feign 无法连接到 localhost
- postgresql - 如何为 JSONB 字段 PostgreSQL 构造查询更新(我需要添加一个新元素)
- c# - 使用c#将varchar转换为float时出错
- php - 我想调整我的图像大小,但有些图像保存为空白