需要一种从文件中获取信息并跳过信息是不是在另一个文件中的方法

Posted

技术标签:

【中文标题】需要一种从文件中获取信息并跳过信息是不是在另一个文件中的方法【英文标题】:Need a way to grab information out of a file and skip if information is in another file需要一种从文件中获取信息并跳过信息是否在另一个文件中的方法 【发布时间】:2016-04-09 05:43:14 【问题描述】:

我有一个名为 skip.txt 的文件,其中包含以下信息:

***.com 
github.com 
www.sa-k.net 
yoursearch.me 
search1.speedbit.com 
duckfm.net
search.clearch.org 
webcache.googleusercontent.com

我还有一个名为 information.txt 的文件,其中包含以下信息:

http://search.clearch.org/?a=web&q=Viewcat_h.php%3Fidcategory%3D%20%3Cstrong%3ESite%3C%2Fstrong%3E%20.pl%20
https://moodle.org/mod/forum/discuss.php?d=246409
http://webcache.googleusercontent.com/search?q=cache:oqPwN7FtDWgJ
http://www.aquariumist.com.ua/spr.php?id=7
http://search.clearch.org/?a%3Dweb%26q%3DViewcat_h.php%253Fidcategory%253D%2520%253Cstrong%253ESite%253C%252Fstrong%253E%2520.pl%2520%2Binurl:viewCat_h.php?idCategory%3D&hl=en&gbv=1&ct=clnk
http://www.astbury.leeds.ac.uk/research/spr.php
http://www.media4play.li/s/spr+php+id.html
http://v.virscan.org/SPR/PHP.ID.html
http://search.clearch.org/?a=images&q=Viewcat_h.php%3Fidcategory%3D+
http://search.clearch.org/?a=web&q=Inurl%20Viewcat_h.php%3Fidcategory%3D%20Site%20Clinsp=%3Fpvaid%3D97f2b2aa136c4af0936453a19d9ab1b2%26fcoid%3D302363
http://webcache.googleusercontent.com/search?q=cache:5qNE1JBqUeIJ
http://search.clearch.org/?a%3Dweb%26q%3DInurl%2520Viewcat_h.php%253Fidcategory%253D%2520Site%2520Cl%26insp%3D%253Fpvaid%253D97f2b2aa136c4af0936453a19d9ab1b2%2526fcoid%253D302363%2Binurl:viewCat_h.php?idCategory%3D&hl=en&gbv=1&ct=clnk

我想要一种方法来获取此信息并移动到next url,有没有一种方法可以从skip.txt 文件中读取,如果information.txt 文件包含该skip.txt 文件中的任何内容,请移动到文件中的下一个 url?

预期输出:

http://www.astbury.leeds.ac.uk/research/spr.php
http://www.media4play.li/s/spr+php+id.html
http://v.virscan.org/SPR/PHP.ID.html
https://moodle.org/mod/forum/discuss.php?d=246409
http://www.aquariumist.com.ua/spr.php?id=7

我做了一些研究,发现了 grep 函数,但这需要一个复杂的正则表达式,我不是很好。所以如果你能帮助我找到一种方法来跳过skip.txt 中的信息,或者帮助我使用一个很棒的正则表达式!提前谢谢你。

【问题讨论】:

以后,请将您的示例归结为基本要素。为了说明您的观点,“skip_txt”可能是三四行,而“information.txt”可能有更少和更短的行。 skip.txt 中的行都以尾随空格结尾,这显然不是预期的。在我将错误跟踪到这些空间之前,我无法理解为什么我的代码不起作用。请编辑以删除它们。 @CarySwoveland 很抱歉,我是新来的。我将编辑代码以去除尾随空格。 【参考方案1】:

假设您将跳过文件读入变量skip,将信息文件读入变量info_file。那么

skip_arr = skip.split("\n").map(&:strip)
  #=> ["***.com", "github.com", "www.sa-k.net", "yoursearch.me",
  #    "search1.speedbit.com", "duckfm.net", "search.clearch.org",
  #    "webcache.googleusercontent.com"]

.map(&:strip)(您可以将其视为.map |s| s.strip )使用String#strip 删除围绕skip.split("\n") 生成的数组元素的所有空格。这可能没有必要,但预防措施无害。

info_arr = info.split("\n")
  #=> ["http://search.clearch.org/?a=web&q=Viewcat_h...,
  #    "https://moodle.org/mod/forum/discuss.php?d=246409",
  #    "http://webcache.googleusercontent.com/search?q=cache:oqPwN7FtDWgJ",
  #    "http://www.aquariumist.com.ua/spr.php?id=7",
  #    "http://search.clearch.org/?a%3Dweb%26q%3DViewcat_h.php...,
  #    "http://www.astbury.leeds.ac.uk/research/spr.php",
  #    "http://www.media4play.li/s/spr+php+id.html",
  #    "http://v.virscan.org/SPR/PHP.ID.html",
  #    "http://search.clearch.org/?a=images&q=Viewcat_h.php%3Fidcategory%3D+",
  #    "http://search.clearch.org/?a=web&q=Inurl%20Viewcat_h.php...,
  #    "http://webcache.googleusercontent.com/search?q=cache:5qNE1JBqUeIJ",
  #    "http://search.clearch.org/?a%3Dweb%26q%3DInurl%2520Viewcat_h.php...]

接下来我们定义一个正则表达式。

r = / 
    (?<=\/\/)  # match two forward slashes in a positive lookbehind
    # Regexp.union(skip_arr)  # match any element of skip_arr
    (?=\/)     # match a forward slash in a positive lookahead
    /x         # free-spacing regex definition mode
#=> / 
    (?<=\/\/)  # match two forward slashes in a positive lookbehind
    (?-mix:***\.com|github\.com|www\.sa\-k\.net|yoursearch\.me|
      search1\.speedbit\.com|duckfm\.net|search\.clearch\.org|
      webcache\.googleusercontent\.com) # match any element of skip_arr
    (?=\/)     # match a forward slash in a positive lookahead
    /x 

最后,使用Array#reject 方法删除info.arr 中匹配此“正则表达式”的元素:

info_arr.reject  |s| s =~ r 
  #=> ["https://moodle.org/mod/forum/discuss.php?d=246409",
  #    "http://www.aquariumist.com.ua/spr.php?id=7", 
  #    "http://www.astbury.leeds.ac.uk/research/spr.php",
  #    "http://www.media4play.li/s/spr+php+id.html",
  #    "http://v.virscan.org/SPR/PHP.ID.html"] 

【讨论】:

以上是关于需要一种从文件中获取信息并跳过信息是不是在另一个文件中的方法的主要内容,如果未能解决你的问题,请参考以下文章

使用 ngFor 循环并跳过第 n 个元素

如何使用命令行dpkg选项解压缩conf并跳过postinst脚本

Node Js Async 未按正确顺序运行并跳过承诺

Python-在表格中显示常用词并跳过某些词

读取 C 源文件并跳过 /**/ 注释

jQuery .unload() 忽略淡出并跳过