Ruby 为什么赢了';我的简单正则表达式模式是否匹配并删除文件扩展名?
我有一个字符串:Ruby 为什么赢了';我的简单正则表达式模式是否匹配并删除文件扩展名?,ruby,regex,Ruby,Regex,我有一个字符串: app_copy--28.ipa 我想要的结果是: app_copy --后面的数字可以是可变长度的,因此我希望匹配所有内容,包括--和之后的内容 我尝试了几种模式,但由于某些原因,没有一种模式匹配: gsub("--\*", "") gsub("--*", "") gsub("--*.ipa", "") gsub("--\[0-9].ipa", "") 我错过了什么?这是怎么回事 str = "app_copy--28.ipa" str[0..str.index("-"
app_copy--28.ipa
我想要的结果是:
app_copy
--
后面的数字可以是可变长度的,因此我希望匹配所有内容,包括--
和之后的内容
我尝试了几种模式,但由于某些原因,没有一种模式匹配:
gsub("--\*", "")
gsub("--*", "")
gsub("--*.ipa", "")
gsub("--\[0-9].ipa", "")
我错过了什么?这是怎么回事
str = "app_copy--28.ipa"
str[0..str.index("-")-1]
# => "app_copy"
str = "app_copy--28.ipa"
str.split("--").first
# => "app_copy"
这是怎么回事
str = "app_copy--28.ipa"
str[0..str.index("-")-1]
# => "app_copy"
str = "app_copy--28.ipa"
str.split("--").first
# => "app_copy"
让我们看看您的测试模式:
实际上等同于“--\*”
(因为“--*”
是一个转义序列)李>\*
将匹配单个“-*”
字符,后跟零个或多个-
字符-
将匹配单个“-*.ipa”
字符,后跟零个或多个-
字符,后跟任何单个字符,后跟文字-
ipa
实际上相当于“-\[0-9].ipa”
(因为“-[0-9].ipa”
是一个转义序列),它将匹配一个文本\[
,后跟一个十进制数字,后跟任何单个字符,后跟一个文本-
ipa
Regexp
;如果作为字符串提供,则它包含的任何正则表达式元字符都将按字面解释
您需要将模式转换为Regexp
(使用),或者使用
试试这个模式
--.*
此模式将查找任何文本--
,后跟零个或多个字符
例如:
"app_copy--28.ipa".gsub(/--.*/, "") # app_copy
让我们看看您的测试模式:
“--\*”
实际上等同于“--*”
(因为\*
是一个转义序列)
“-*”
将匹配单个-
字符,后跟零个或多个-
字符
“-*.ipa”
将匹配单个-
字符,后跟零个或多个-
字符,后跟任何单个字符,后跟文字ipa
“-\[0-9].ipa”
实际上相当于“-[0-9].ipa”
(因为\[
是一个转义序列),它将匹配一个文本-
,后跟一个十进制数字,后跟任何单个字符,后跟一个文本ipa
但是,这些模式在您使用时都不会起作用,因为它们不会将其视为正则表达式:
模式通常是一个Regexp
;如果作为字符串提供,则它包含的任何正则表达式元字符都将按字面解释
您需要将模式转换为Regexp
(使用),或者使用
试试这个模式
--.*
此模式将查找任何文本--
,后跟零个或多个字符
例如:
"app_copy--28.ipa".gsub(/--.*/, "") # app_copy
不要使用gsub
尝试更改字符串,只需使用模式匹配所需零件即可:
"app_copy--28.ipa"[/^(.+?)--/, 1] # => "app_copy"
字符串需要许多不同类型的参数。您可以传入模式和所需捕获的索引,以仅提取该部分。从文档中:
str[regexp, capture] → new_str or nil
如果提供了Regexp,则返回字符串的匹配部分。如果捕获跟随正则表达式(可能是捕获组索引或名称),则跟随正则表达式,则将返回MatchData的组件
不要使用gsub
尝试更改字符串,只需使用模式匹配所需零件即可:
"app_copy--28.ipa"[/^(.+?)--/, 1] # => "app_copy"
字符串需要许多不同类型的参数。您可以传入模式和所需捕获的索引,以仅提取该部分。从文档中:
str[regexp, capture] → new_str or nil
如果提供了Regexp,则返回字符串的匹配部分。如果捕获跟随正则表达式(可能是捕获组索引或名称),则跟随正则表达式,则将返回MatchData的组件
“app\u copy--28.ipa”.gsub(--.*,”)
产生与原始输入相同的结果。@maq-ahh,对不起,它必须是正则表达式文本(/…/
),请参阅我的更新答案。“app\u copy--28.ipa.gsub(--.*,”)
产生与原始输入相同的结果。@maq-ahh,对不起,它必须是正则表达式文本(/…/
),请参阅我的最新答案。