【问题标题】:Regex to match substring of a string [duplicate]正则表达式匹配字符串的子字符串[重复]
【发布时间】:2018-08-06 12:59:59
【问题描述】:

我有一个枚举,我将其用作程序的固定参数值,并使用正则表达式来清理用户输入。

我希望用户能够输入与其中一个值的部分匹配并接受该值而不是其他值。

例如,如果枚举是:

end
end now
start
swarm
condition

用户输入

s
st
sta
etc...

没关系,因为它是开始的一部分; 但是如果用户输入了

ending

它不会是好的,因为它不是任何其他词的一部分。

我知道我可以指定组中的每个排列 (s|st|sta|star|start) 并且它会完成工作,但是为大约 12 个不同的值执行此操作似乎很难维护并且“丑陋”...

有没有更简单的方法来匹配固定值或这些固定值的子值?

不是搜索特定于一种引擎/语言的内容(例如 java 代码..)

【问题讨论】:

  • 我不会只在正则表达式中这样做-无论如何您都需要将用户输入拆分为单词并根据命令检查每个单词。一些正则表达式引擎确实提供了“以”查询(如 Python 的 re.match()),在其他引擎中,您可以在正则表达式前面添加 ^ 以强制它在字符串的开头匹配,但无论如何,您需要做一些超出正则表达式本身的编程工作。
  • s(t(a(rt?)?)?)?)? 会更简洁地完成您的要求。有些语言的库可以为您执行此操作,但几乎没有与语言无关的方式来运行该代码。
  • st?a?r?t? 显然可以解决问题
  • @Vivick 确定,如果 srt 有效。
  • 我搜索了更优雅的东西,也许是我错过的运算符。但似乎唯一的选择是接受一些通用正则表达式的输入并在代码中添加特定的验证(作为后处理)

标签: regex substring


【解决方案1】:

Regex 不是这项工作的正确工具。

只需找到用户输入的长度(称为 N),然后遍历您的有效值并查看该值的前 N ​​个字符是否与输入匹配。

如果只有一项匹配,那么您就得到了结果!如果多个匹配项,您将需要来自用户的更多字母来识别正确的一个。如果没有匹配,则无效。

【讨论】:

  • 在代码中执行此操作非常简单(检查枚举值是否以传递的值开头,如果找到匹配则返回)。由于我正在验证我的输入,(对于长度、字符集和值匹配......)它实际上感觉像是应该通过正则表达式轻松完成的事情......
  • 可以在正则表达式中执行此操作,但同样您可以使用大锤插入螺钉。并不意味着它是完成这项工作的最佳工具。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
  • 2017-11-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多