如何从Python中的长字符串中提取一些字符串?

时间:2012-09-30 16:58:39

标签: python string

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

http://www.someDomainName.com/anyNumber 

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

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

4 个答案:

答案 0 :(得分: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 总是被捕获..这是匹配的完整字符串..

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

import re
matcher = re.compile(r'www.(.+).com\/(.+)
matches = matcher.search(yourstring)
if matches:
    str1,str2 = matches.groups()

答案 3 :(得分:0)

如果您确定SomeDomainName中没有任何点,您可以在第一次出现字符串“.com /”并从该索引中取出所有内容

这将避免使用难以维护的正则表达式

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