2013-07-23 70 views
0

在文档中,我试图寻找包含alpha和数字的12位字符串的出现。样本字符串是:“PXB111X2206”Grep for File in R

我试图让包含此字符串中的R使用下面的行号:

FileInput = readLines("File.txt") 
prot_pattern="([A-Z0-9]{12})"; 
prot_string<-grep(prot_pattern,FileInput) 
prot_string 

这工作得很好,直到它击中了一个包含所有大写的文件案例标题,并返回包含单词“CONCENTRATIO”的行

我试图寻找的字符串是:“PXB111X2206”。我在期待grep返回包含字符串的行号:“PXB111X2206”。然而,它返回包含单词的行号:“CONCENTRATIO”

我上面的表达出现了什么问题?任何想法我在这里做错了吗?

以下是一些示例输入: 此处描述的每个设计目标都非常重要,但它只是实现成功项目所需的一个方面。

一个成功的项目就是项目目标在早期被确定,所有建筑系统的相互依存关系从规划和编程阶段同时进行协调的项目。

浓度

浓度为设计目标的领域:便利,美观,高性价比,>功能/操作,历史文化保护,高效,安全/安全,可持续和>及其相互关系必须理解,评估并适当应用。

这些设计目标中的每一个都在设计目标文档编号中给出。 > PXB111X2206。 >

感谢&问候, 西马克

+0

感谢您回应一个量词(括号内的数字)。如果你觉得这个w,我很抱歉唉,我已经接受了几乎所有我问过的问题的答案,并且在尝试和接近时几乎总是回信。如果我错过了一个问题或2,道歉为... – BRZ

+1

更像是14 ... – flodel

回答

3

您使用的一个非常强大的工具,一个非常简单的任务,表达

[A-Z0-9]{12} 

将匹配任何字母数字的12大小的大写的字符串,例如单词“CONCENTRATIO”,然而,你的“PXB111X2206”是甚至没有12个符号长,所以它不可能被匹配。如果你只想匹配“PXB111X2206”你只需要使用它作为一个正则表达式本身,例如,如果你的文件内容是:

foo 
CONCENTRATIO. 
bazz 
foo bar bazz PXB111X2206 foo bar bazz 
foo 
bar 
bazz 

,并使用:

grep('PXB111X2206',readLines("File.txt")) 

则R只会按照您的意愿匹配第4行。

编辑

如果你正在寻找一个特定模式的尝试:

grep('[A-Z]{3}[0-9]{3}[A-Z]{1}[0-9]{4}',readLines("File.txt")) 

该表达式会匹配“AAADDDADDDD”,其中A是一个大写字母,以及d一个数字串,正则表达式含有基团(方括号内的符号),并告诉多少前一符号的将表达接受,如果没有量词存在时,它假定它是1

+0

谢谢你......但我不是在寻找特定字符串..但是包含字母数字的字符串如:PXB111X2206。所以,正则表达式。谢谢... – BRZ

+0

@simak我编辑了答案,希望它有帮助,问题是有点小姐领导:“我试图寻找的字符串是:'PXB111X2206'。” – amaurs

+0

对不起,感谢编辑。我相信这会有效。我会检查出来,并回来..再次感谢! – BRZ

0

让我们来看看你的正则表达式是什么意思。 [A-Z0-9]表示任何大写字母或数字,并且{12}表示前面的表达式必须恰好出现12次。字符串CONCENTRATIO是12个字母的字母,所以grep选择它并不奇怪。如果你要拿出比赛那场比赛只是字母或只是数字,你可以尝试像

allleters <- grep("[A-Z]{12}",strings) 
allnumbers <-grep("[0-9]{12}",strings) 
both <- grep("[A-Z0-9]{12}",strings) 

东西,你想那么会是这样的

both <- both[!both %in% union(allletters,allnumbers)] 

有人提供更好的regexfu可能具有匹配一个更优雅的解决方案,但这也会起作用。

+0

Thanks..I'll给这个一杆.. – BRZ