Tag: 正则表达式

如何使用Ruby 1.9检测字符串是否仅包含拉丁符号?

我需要检测一些字符串是否包含非拉丁字母表中的符号。 数字和特殊符号如- , _ , +都很好。 我需要知道是否有任何非拉丁符号。 例如: “123sdjjsf-4KSD”.just_latin? 应该回归true 。 “12333ыц4–sdf”.just_latin? 应该返回false 。

如何使用Ruby检查字符串中是否至少有一个数字?

我需要检查一个字符串是否包含至少一个使用Ruby的数字(我假设某种正则表达式?)。 我该怎么办?

ruby正则表达式和分组

我有跟随文本’some-text-here’并尝试使用组从中获取’text’字样。 如果我使用那个表达式/some-(\w+)-here/ all工作正常,但是如果我尝试对它进行分组/some-(?\w+)-here/它会引发错误Undefined (?…) sequence. 我做错了什么? (Ruby 1.9.2) 更新:对我感到羞耻。 这完全取决于我的经营权。 是的,我使用RVM,我的ruby版本打开了1.9.2。 但我已经在http://rubular.com/上测试了这个表达式,它是Rubular runs on Ruby 1.8.7的页脚Rubular runs on Ruby 1.8.7 。 Ruby 1.8.7和Ruby 1.9.2有一个不同的正则表达式引擎。 所以我的表达式适用于1.9.2,但不适用于1.8.7

ruby正则表达式扫描与=〜

Ruby(1.9.3)文档似乎暗示扫描等同于=〜,除此之外 scan返回多个匹配项,而=〜仅返回第一个匹配项,并且 scan返回匹配数据,而=〜返回索引。 但是,在以下示例中,两个方法似乎为同一个字符串和表达式返回不同的结果。 这是为什么? 1.9.3p0 :002 > str = “Perl and Python – the two languages” => “Perl and Python – the two languages” 1.9.3p0 :008 > exp = /P(erl|ython)/ => /P(erl|ython)/ 1.9.3p0 :009 > str =~ exp => 0 1.9.3p0 :010 > str.scan exp => [[“erl”], [“ython”]] 如果第一次匹配的索引是0,不应该扫描返回“Perl”和“Python”而不是“erl”和“python”? 谢谢

如何使用Ruby中的RegEx更改字符串中的字母大小写

说我有一个字符串:“hEY” 我想将它转换为“嘿” string.gsub!(/([az])([AZ]+ )/, ‘\1′.upcase) 这就是我的想法,但是当我在gsub方法中使用它时,似乎upcase方法什么都不做。 这是为什么? 编辑:我想出了这个方法: string.gsub!(/([az])([AZ]+ )/) { |str| str.downcase!.capitalize! } 有没有办法在正则表达式中执行此操作? 我真的不明白’\ 1”\ 2’的事情。 这是反向引用吗? 这是如何运作的

使用Regex表达式搜索Ruby数组

嗨我有小ruby函数,拆分Ruby数组如下: – def rearrange arr,from,to sidx = arr.index from eidx = arr.index to arr[sidx] = arr[sidx+1..eidx] end arr= [“Red”, “Green”, “Blue”, “Yellow”, “Cyan”, “Magenta”, “Orange”, “Purple”, “Pink”, “White”, “Black”] start = “Yellow” stop = “Orange” rearrange arr,start,stop puts arr.inspect #=> [“Red”, “Green”, “Blue”, [“Cyan”, “Magenta”, “Orange”], “Cyan”, “Magenta”, “Orange”, “Purple”, “Pink”, “White”, “Black”] 我需要在我的开始使用正则表达式并停止搜索,例如 开始=“/大喊/” […]

通过RegEx从Open3.popen3的stdout中提取值并存储它

我是Ruby的新手,似乎无法找到获取外部命令输出的方法。 我需要提取命令返回的值。 现在我有这样的事情: stdin, stdout, stderr, wait_thr = Open3.popen3(“#{path}/foobar”, configfile) if /exit 0/ =~ wait_thr.value.to_s runlog.puts(“Foobar exited normally.\n”) puts “Test completed.” someoutputvalue = stdout.read(“TX.*\s+(\d+)\s+”) puts “Output value: ” + someoutputvalue end 但我显然没有在stdout上使用正确的方法,因为Ruby告诉我它不能将String转换为Integer。 这样做的正确方法是什么? 我在文档中找不到stdout可用的方法。 使用stout.read我正在使用Ruby 1.9.3。 更新 为了清楚起见,我正在尝试读取程序的输出,应用正则表达式,并将提取的值存储到变量中供以后使用。 因此,例如,如果输出是“TX So so so:28”,我想只获得“28”(我validation上面的正则表达式匹配我需要匹配的东西,我只是想知道如何将所提取的值存储在一个变量)。

正则表达式蛋白质消化

所以,我正在用酶(为了你的好奇心,Asp-N)消化蛋白质序列,它在单字母编码序列中由B或D编码的蛋白质之前切割。 我的实际分析使用String#scan进行捕获。 我想弄清楚为什么以下正则表达式不能正确消化它… (\w*?)(?=[BD])|(.*\b) 前提条件(.*\b)存在以捕获序列的结尾。 对于: MTMDKPSQYDKIEAELQDICNDVLELLDSKGDYFRYLSEVASGDN 这应该给出类似的东西: [MTM, DKPSQY, DKIEAELQ, DICN, DVLELL, DSKG, … ]但是错过了序列中的每个D. 我一直在使用http://www.rubular.com进行故障排除,它运行在1.8.7上,虽然我也在1.9.2上测试了这个REGEX但无济于事。 据我所知,在两个版本的ruby中都支持零宽度前瞻断言。 我的正则表达式做错了什么?

如何在Ruby中修复此多行正则表达式?

我在Ruby中有一个正则表达式,它在多行模式下无法正常工作。 我正在尝试将Markdown文本转换为Redmine中使用的Textile-eque标记。 问题出在我的正则表达式中,用于转换代码块。 它应该找到带有4个空格或制表符的任何行,然后将它们包装在预标签中。 markdownText = ‘# header some text that precedes code var foo = 9; var fn = function() {} fn(); some post text’ puts markdownText.gsub!(/(^(?:\s{4}|\t).*?$)+/m,”\n\\1\n “) 预期结果: # header some text that precedes code var foo = 9; var fn = function() {} fn(); some post text 问题是关闭预标记打印在文档的末尾而不是“fn();”之后。 我尝试了以下表达式的一些变体,但它不匹配: gsub!(/(^(?:\s{4}|\t).*?$)+^(\S)/m, “\n\\1\n \\2”) […]

正则表达式:如果字符串包含空格,则不匹配

我似乎无法找出匹配字符串的正则表达式模式,只要它不包含空格。 例如 “this has whitespace”.match(/some_pattern/) 应该返回nil但是 “nowhitespace”.match(/some_pattern/) 应该使用整个字符串返回MatchData。 有谁能建议上面的解决方案?