2012-07-10 168 views
-4

如何在特定文本中获取文本? 一样,如果我有这样的文字:获取特定文本中的文本?

'lololol \r asdfasdf r\ gfhfgr'

我怎样才能得到它返回“asdfasdf”。基本上,获取位'\r''r\'之间的文本?

+4

你试过了什么? – 2012-07-10 02:19:17

+0

@JonClements我还没有尝试过任何东西......我唯一的线索是使用for循环和一些条件...而那些效率都不高。 – 2012-07-10 03:30:51

回答

4

另一重解决方案,

import re 

s = r'lololol \r asdfasdf r\ gfhfgr' 
pattern = re.compile('\\\\r (.*?) r\\\\') 

print pattern.findall(s) 

结果['asdfasdf']

编辑:

好,花花公子,这就是你说你想要的例子。如果您愿意,欢迎您使用

pattern = re.compile('\\\\r(.*?)r\\\\') 

这将代替给你[' asdfasdf ']

'所有的斜线'是需要的,因为Python的方式和重新解析字符串;斜杠用作象\n(换行符)这样的有向图的转义字符。所以要表示一个斜杠,你必须使用\\有向图。试试print('\\')看到这个。

然后你必须将它加倍,因为再次分析字符串是针对它自己的二元图(\ d代表数字,\ s代表空格等)。所以如果你输入'\\\\',Python就会明白这是一个由两个斜线组成的字符串,\\,它传递给re,解析它并认为你正在寻找一个单独的\字符。

有时你可以不用做这件事而逃脱;如果您有像'\m'这样的字符串,其中尾部字符不会生成有效的有向图,则结果实际上是双字符字符串\m(尝试print('\m'))。 \ r有点时髦; Python认为它是一个回车符,但是re不使用\ r作为二合字母,所以给Python'\ r'或'\\ r'都会导致重新查找字符串'\ r'。我更喜欢双斜杠,因为这意味着你不必记住两个单独的定义什么是或不是一个合法的有向图!另一方面,Python和re都认为\'是单引号图(print('\'')打印一个'字符) - 所以这两个斜杠必须完全双重转义或者您会得到一个“嘿,剩下的部分在哪里?串??”错误('字符串未终止')。

另一种方法是输入原始字符串(r'abc');这告诉Python不要解析字符串中的有向图,但re仍然会这样做,所以你的模式必须看起来像

pattern = re.compile(r'\\r(.*?)r\\') 
+2

:) - 可能使捕获组不贪心虽然...但OP可以决定我猜... – 2012-07-10 02:49:39

+0

@JonClements:好主意,已经这样做了。 – 2012-07-10 02:54:49

+0

伙计,如果\ r和另一件事物之间没有空格,则不起作用。另外,为什么这么多“\”?你能解释一下吗?或者链接到某些东西? – 2012-07-10 03:38:41

2

您可以在Python中使用正则表达式。

>>> import re 
>>> s = 'lololol \r asdfasdf r\ gfhfgr' 
>>> e = re.search(r'\r (?P<boxflux>.*) r\\', s) 
>>> e.group('boxflux') 
'asdfasdf' 

boxflux.com

+0

AttributeError:'NoneType'对象没有属性'group' – 2012-07-10 03:34:54

+0

对于命名组。 – 2012-07-10 06:23:54