0

我有很多长字符串——并非所有字符串都具有相同的长度和内容,所以这就是我不能使用索引的原因——我想从所有字符串中提取一个字符串。这是我要提取的:

http://www.someDomainName.com/anyNumber 

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

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

4

4 回答 4

2
import re
results = re.findall(r'\bhttp://www\.someDomainName\.com/\d+\b', long_string)
于 2012-09-30T17:31:50.867 回答
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.. 并且总是捕获了 yes group 0.. 那是匹配的完整字符串..

于 2012-09-30T17:12:09.617 回答
0

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

import re
matcher = re.compile(r'www.(.+).com\/(.+)
matches = matcher.search(yourstring)
if matches:
    str1,str2 = matches.groups()
于 2012-09-30T17:09:07.547 回答
0

如果您确定 SomeDomainName 中没有点,您可以只取字符串“.com/”的第一次出现,然后取该索引中的所有内容

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

exp = 'http://www.aejlidjaelidjl.com/alieilael'
print exp[exp.find('.com/')+5:]
于 2012-09-30T17:37:03.230 回答