ruby - 使用正则表达式返回字符串的前缀,其中剥离的字符串有时包含 '/'

标签 ruby regex string

我正在尝试返回字符串的前缀,我的相关问题在这里,但我遇到了一个新问题。

How to return the string prefix from regexp

基本上我有一个类似的字符串

23430-BL
23430BZ
23430BK/BL

我尝试删除的扩展是

strip_ext = BK/BL|BZ|BL

我用来获取不带扩展名的字符串的正则表达式是

prefix = sample_data[/(.*[^-])-?(?:#{strip_ext})/,1]

返回

23430
23430
23430-BK

理论上,我知道正则表达式会找到 BL 匹配,并且出于某种原因选择它作为 BK/BL 的匹配。但是有没有办法让正则表达式找到 BK/BL 而不是 BL?

不幸的是,我要删除的部分之前并不总是有破折号。

我添加了原始的 strip_ext 列表作为示例,并认为这样会更容易理解。实际的 strip_ext 列表如下所示,并根据提供的示例数据进行更改,因此不幸的是,它并不像下面 Mu 的答案那么简单。

AM/DB|AM/BN|RD/BK|PR/WT|YP/BN|YP/CH|YP/DB|PK/BN|PK/CH|PK/DB|SF/BN|SF/CH|SF/DB|AM/CH|BN/CH|BN/DB|CH/BN|CH/DB|DB/BN|DB/CH|BN/BN|CH/CH|MR/BN|MR/CH|MR/DB|DB/DB|AM/AB|DIC/BN|DIC/CH|DIC/DB|BN|DB|WT|BN/WT|BK|WT/BN|BK/BN|BK/DB|BL/BN|BL/DB|BK/CH|BL/CH|AM|CH|FR|SB|AM/BK|AM/WT|PT/CH|BG/CH|BG/DB|MF/CH|MF/DB|YR/CH|YR/DB|WT/DB|pt/bn

最佳答案

使第一个量词变得不贪婪。

(.*?[^-])-?(?:BK/BL|BZ|BL)

查看here on Regexr

? 使 .*? 尽可能少地匹配。

关于ruby - 使用正则表达式返回字符串的前缀,其中剥离的字符串有时包含 '/',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7439296/

相关文章:

mysql - 多数据库实时切换

java - 正则表达式 日期 Java 导入

string - 方案:如何在字符串中查找字符的位置

java - 你能拉开一根绳子吗?

javascript - endsWith() 函数中长度可选参数的用途是什么?

Ruby while 在 if 语句中循环

ruby - 检查一个字符串是否包含 Ruby 中另一个字符串的所有字符

ruby - Sinatra 不会在 Chrome 上通过重定向保持 session

python - Pandas 如何找到具有列等空间值的行数

c# - 从字符串列表中提取索引号