-4

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

'lololol \r asdfasdf r\ gfhfgr'

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

4

2 回答 2

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('\\')看看这个。

然后,您必须将其加倍,因为 re 会根据其自己的有向图集再次解析字符串(\d 表示数字,\s 表示空格等)。因此,如果您输入'\\\\',Python 会将其理解为由两个斜杠 组成的字符串\\,并将其传递给 re,re 对其进行解析并认为您正在寻找单个\字符。

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

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

pattern = re.compile(r'\\r(.*?)r\\')
于 2012-07-10T02:41:42.320 回答
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

于 2012-07-10T02:32:18.653 回答