2012-09-30 71 views
0

我有很多长字符串 - 并非所有字符都具有相同的长度和内容,所以这就是为什么我不能使用索引 - 我想从所有字符串中提取字符串。这是我想提取什么:如何从Python中的长字符串中提取一些字符串?

http://www.someDomainName.com/anyNumber 

SomeDomainName不包含任何数字和与anyNumber在每个长字符串不同。代码应该从任何可能的字符串中提取所需的字符串,并且应该考虑可能出现在长字符串中的空格和其他奇怪的东西 - 应该可以用正则表达式吗? - 。有人能帮助我吗?谢谢。

更新:我应该说www。和.com总是一样的。另外someDomainName!但还有另一个http://www.在字符串

+0

“www。”怎么样?和“.com”? –

+0

幸运的是,这总是一样的! – Loolooii

+0

正如“我不在乎他们”一样? –

回答

1
import re 
results = re.findall(r'\bhttp://www\.someDomainName\.com/\d+\b', long_string) 
+0

谢谢。正是我想要的。 – Loolooii

0

是的,你最简单的赌注是正则表达式。这里的东西,可能会完成这项工作:

import re 
matcher = re.compile(r'www.(.+).com\/(.+) 
matches = matcher.search(yourstring) 
if matches: 
    str1,str2 = matches.groups() 
1
>>> import re 
>>> pattern = re.compile("(http://www\\.)(\\w*)(\\.com/)(\\d+)") 
>>> matches = pattern.search("http://www.someDomainName.com/2134") 
>>> if matches: 
     print matches.group(0) 
     print matches.group(1) 
     print matches.group(2) 
     print matches.group(3) 
     print matches.group(4) 

http://www.someDomainName.com/2134 
http://www. 
someDomainName 
.com/ 
2134 

在上面的图案,我们已抓获5组 -

  • 一个是与匹配
  • 其余的都是完整的字符串按照括号的顺序你看..(所以,你正在寻找第二个..) - (\\w*)

如果你愿意,你可以捕捉string你感兴趣的只是一部分。所以,你可以从你不想和图案的其余部分去除brackets只是不停(\w*)

>>> pattern = re.compile("http://www\\.(\\w*)\\.com/\\d+") 
>>> matches = patter.search("http://www.someDomainName.com/2134") 
>>> if matches: 
     print matches.group(1) 

someDomainName 

在上面的例子中,你不会有groups - 2, 3 and 4,如上面的例子中,我们已经捕获只1 group ..是的group 0总是捕捉..这是相匹配的完整的字符串..

+0

你确定这适用于每一个字符串吗?因为这与我的情况不符。我如何使用字符串而不是w *,因为我知道名字,并且没有必要这样做。 – Loolooii

+0

只有数字每次都是可变的。 – Loolooii

+0

你给的是什么输入字符串。正如我向你展示的那样,在我的情况下匹配...可变数字,任何域名... –

0

如果你确定t这里有没有点在SomeDomainName你可以把串“.COM /”的第一次出现,并采取一切事情,从指数上

这将避免你使用正则表达式这是难以维持

exp = 'http://www.aejlidjaelidjl.com/alieilael' 
print exp[exp.find('.com/')+5:] 
相关问题