解释一下这对我来说是什么?

2024-03-29 07:02:00 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我见过这种类型的东西好几次,但我从来没有找到任何关于它。有人能解释一下这些“r'foo(*)是什么东西,并把我和python文档联系起来吗?我认为它们与在字符串中查找关键字有关。我说得对吗?你知道吗

(r'why (.*) i (.*)\?', 
( "You%1%2?", 
"Perhaps you only think you%1%2")), 

(r'why (.*) you(.*)\?', 
( "Why%1 you%2?", 
"%2 I%1", 
"Are you sure I%2?")), 

(r'why (.*)\?', 
( "I cannot tell you why%1.", 
"Why do you think %1?" )), 

这个特定的代码段来自nltk.chat.zen语言模块。你知道吗


Tags: 字符串文档you类型onlyfoo关键字are
3条回答

这些似乎是regular expressions。正则表达式允许您以一种相当强大和复杂的方式搜索字符串中的模式。不过,它们可能有点神秘。这些似乎是某种原始喋喋不休的基础。你知道吗

>>> import re
>>> regex, phrases = (r'why (.*) i (.*)\?', 
... ( "You %s %s?", 
... "Perhaps you only think you %s %s"))
>>> phrase1, phrase2 = phrases
>>> groups = re.search(regex, 'why am i dumb?')
>>> phrase1 % (groups.group(1), groups.group(2))
'You am dumb?'
>>> phrase2 % (groups.group(1), groups.group(2))
'Perhaps you only think you am dumb'

啊,也许你特别想知道r'blahblah'是什么意思。正如其他人所解释的,r只是使它成为一个原始字符串,Python没有对它进行某些处理,这使得REs更易于阅读。你知道吗


这里有一些更接近我的初衷是为了这些字符串。他们似乎没有使用标准的Python组替换语法,所以我假设他们必须使用一个定制的替换函数,这个函数可能足够复杂,可以处理动词形式的转换!您可以看到基本思想here。你知道吗

>>> import re
>>> regex, phrases = (r'why (.*) i (.*)\?',
... ( r'You \g<1> \g<2>?',
...   r'Perhaps you only think you \g<1> \g<2>.'))
>>> phrase1, phrase2 = phrases
>>> re.sub(regex, phrase1, 'why am i dumb?')
'You am dumb?'
>>> re.sub(regex, phrase2, 'why am i dumb?')
'Perhaps you only think you am dumb.'

在Python中,r'something'r"something"raw strings。普通字符串和原始字符串之间的区别在于,在后一种情况下,反斜杠字符(\)不需要转义。你知道吗

在您给出的代码中,原始字符串似乎用于指定regular expressions,这是原始字符串的常见用例。你知道吗

正则表达式用于搜索模式或匹配模式。有一个很好的教程here。你知道吗

正如aix所指出的,r表示它是一个原始字符串。正如其他人所指出的,所讨论的字符串是正则表达式。原始字符串对于表示正则表达式很有用,因为它们不需要转义(例如,当您编写\\以获取输出中的单个“\”时,您已经转义了反斜杠)。反斜杠在正则表达式中非常常见,因此不必重复它们可以提高清晰度。你知道吗

相关问题 更多 >