Tag: 正则表达式

为正则表达式匹配编写gsub的完美方式?

我正在尝试为正则表达式匹配编写一个gsub,但我想有一个更完美的方法来做到这一点。 我的等式: ref.gsub(ref.match(/settings(.*)/)[1], ”) 所以我可以采取这个settings/animals ,并返回只是settings 。 但是如果settings为空怎么办? 比我的[1]失败了预期。 那么如果有时settings不匹配,怎么能写上面的语句呢? 所以,基本上,如果它找到了单词, settings ,比它之后摆脱任何东西。 但如果没有,不用担心。 谢谢!

正则表达式的浮点?

我正在尝试编写一个RegEx来validation浮点数。 这是我迄今为止所管理的内容: /^[-+]?[1-9]\d{0,2}(\.\d{1,1})?/ 该号码有效,如果: 无论是积极的还是消极的 最多2位数(数十或数百) 百位数不能为0(仅1-9) 比例最大为1 十进制值可以是0或5或根本不存在 所以这些数字是有效的,例如: 1.5 -1.5 17.5 15 -3 30.5 这些数字无效,例如: 1.57 3041.5 17.59 915 -1.56 05.0

包含撇号的Ruby正则表达式是什么?

我目前正在为Ruby执行exerciseism.io并且无法通过最后一次测试。 最后一次测试是: def test_with_apostrophes phrase = Phrase.new(“First: don’t laugh. Then: don’t cry.”) counts = {“first”=>1, “don’t”=>2, “laugh”=>1, “then”=>1, “cry”=>1} assert_equal counts, phrase.word_count end 我收到的错误是: 1) Failure: PhraseTest#test_with_apostrophes [word_count_test.rb:61]: — expected +++ actual @@ -1 +1 @@ -{“first”=>1, “don’t”=>2, “laugh”=>1, “then”=>1, “cry”=>1} +{“first”=>1, “don”=>2, “t”=>2, “laugh”=>1, “then”=>1, “cry”=>1} 我目前的代码是: class Phrase attr_reader :input def initialize(input) @input […]

如何使用一行正则表达式来获取匹配的内容

我是ruby的新手,我想知道我是否只能用一条线来完成这项工作。 以此网站的“搜索”为例。 当用户键入[ruby] regex ,我可以使用以下代码来获取标记和关键字 ‘[ruby] regex’ =~ /\[(.*?)\](.*)/ tag, keyword = $1, $2 我们可以把它写成一行吗? UPDATE 非常感谢! 我可以更难,更有趣的是,输入可能包含多个标签,例如: [ruby] [regex] [rails] one line 是否可以使用一行代码来获取tags数组和关键字? 我试过了,但都失败了。

如何拆分字符串而不在数组中插入空字符串

假设存在匹配,我在使用正则表达式从字符串中分割字符时遇到问题。 我想从字符串的第一部分中分离出“m”或“f”字符,假设下一个字符是一个或多个数字,后跟可选的空格字符,后面是我拥有的数组中的字符串。 我试过了: 2.4.0 :006 > MY_SEPARATOR_TOKENS = [“-“, ” to “] => [“-“, ” to “] 2.4.0 :008 > str = “M14-19” => “M14-19” 2.4.0 :011 > str.split(/^(m|f)\d+[[:space:]]*#{Regexp.union(MY_SEPARATOR_TOKENS)}/i) => [“”, “M”, “19”] 注意数组开头的无关“”元素,并注意到最后一个表达式只是“19”,而我想要字符串中的所有其他内容(“14-19”)。 如何调整我的正则表达式,以便只有表达式的部分才能在数组中结束?

正则表达式在空格上分裂但没有转义空格

我想拆分标准空格” “但不转义空格“\” 例如,使用字符串’my name\ is\ max’ (单引号,因此\是文字) 我想得到[“my”, “name\ is\ max”] 我试过这个正则表达式: /[^\\]\s/ 但结果如下: => [“m”, “name\\ is\\ max”] 这很接近,但我不知道如何保持my 编辑 另一个例子考虑这个字符串: “./db/users/WGDl-HATof-uhdtT7sPfog: email=maxpleaner@gmail.com name=max\\ p” 我想把它分成三个: [ “./db/users/WGDl-HATof-uhdtT7sPfog:”, “email=maxpleaner@gmail.com”, “name=max\\ p” ]

将正则表达式插入到另一个正则表达式中

在以下代码中, k2与k1最小不同。 也就是说,除了使用插值定义之外, k2完全相同。 (也就是说,我预计它会完全相同;显然,从p k2的结果来看,它不是。) v = /[aeiouAEIOUäöüÄÖÜ]/ # vowels k1 = /[[ßb-zB-Z]&&[^[aeiouAEIOUäöüÄÖÜ]]]/ # consonants defined without interpolation k2 = /[[ßb-zB-Z]&&[^#{v}]]/ # consonants defined same way, but with interpolation 但是如下所示,使用带有k1 gsub可以正常工作,而将其与k2一起使用会以某种我无法理解的方式失败。 all_chars = “äöüÄÖÜß”<<('a'..'z').to_a.join<<('A'..'Z').to_a.join p all_chars # "äöüÄÖÜßabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" p all_chars.gsub( k1 , '_' ) # "äöüÄÖÜ_a___e___i_____o_____u_____A___E___I_____O_____U_____" p all_chars.gsub( k2 , '_' ) # "äöüÄÖÜ_abcdefghijklm_o_____u__x__ABCDEFGHIJKLMNOPQRSTUVWXYZ" […]

检查字符串是否重复未知的子字符串

我正在尝试编写一个正则表达式或Ruby方法,它将在字符串中找到最长的重复模式。 例如: “abcabc” => “abc” “cccc” => “c” “abcd” => “abcd” 实现这个的最佳方法是什么? 我天真地试过/^(.*)*$/但这不会起作用,因为它只匹配完整的字符串。

如何只阅读英文字符

我正在阅读一个有时会有中文和英文以外语言字符的文件。 如何编写只读英文单词/字母的正则表达式? 应该只是/^[a-zA-Z]+/ ? 如果我这样做,那么像“eété”这样的词仍然会被选中,但我不希望这样: “été”.match(/^[a-zA-Z]+/) => #nil good I didn’t want that word “eété”.match(/^[a-zA-Z]+/) => #not nil tricked into picking something I did not want

在数字中添加逗号

我试图让像1234567这样的数字变成1,234,567,但需要一些帮助。 我的想法是,我可以使用\d{3}分割,然后加入a。 但问题是\d{3}将它从另一端分组,所以它就像123,456,7,我不想要它。 非常感谢您的帮助!