我正在尝试确定术语是否出现在字符串中。
该术语之前和之后必须出现一个空格,并且也允许使用标准后缀。
例:
term: google
string: "I love google!!! "
result: found
term: dog
string: "I love dogs "
result: found
我正在尝试以下代码:
regexPart1 = "\s"
regexPart2 = "(?:s|'s|!+|,|.|;|:|\(|\)|\"|\?+)?\s"
p = re.compile(regexPart1 + term + regexPart2 , re.IGNORECASE)
并得到错误:
raise error("multiple repeat")
sre_constants.error: multiple repeat
更新
失败的Real代码:
term = 'lg incite" OR author:"http++www.dealitem.com" OR "for sale'
regexPart1 = r"\s"
regexPart2 = r"(?:s|'s|!+|,|.|;|:|\(|\)|\"|\?+)?\s"
p = re.compile(regexPart1 + term + regexPart2 , re.IGNORECASE)
另一方面,以下内容term
顺利通过(+
代替++
)
term = 'lg incite" OR author:"http+www.dealitem.com" OR "for sale'
问题在于,在非原始字符串中\"
为"
。
你幸运与所有其他转义backslashes-的\s
是一样的\\s
,没有s
;
\(
与\\(
,not(
等等相同。但是,您绝不应该依赖幸运,或者假设您完全了解Python转义序列的整个列表。
要么打印出字符串,然后转义丢失的反斜杠(坏),转义 所有 的反斜杠(确定),或者仅使用原始字符串(最佳)。
话虽如此,您发布的regexp不会与它应该匹配的某些表达式匹配,但是它永远不会引发该"multiple repeat"
错误。显然,您的实际代码与您显示给我们的代码不同,并且不可能调试我们看不到的代码。
既然您已经展示了一个真实的可重现测试用例,那就是一个 单独的 问题。
您正在搜索可能包含特殊正则表达式字符的术语,例如:
term = 'lg incite" OR author:"http++www.dealitem.com" OR "for sale'
这p++
在正则表达式来中间的“1以上的1个或多个字母P的”(在其他情况下,同为“1个或多个字母P的”),在一些正则表达式语言,“总是失败”的人,并在其他情况下“引发例外”。Pythonre
属于最后一组。实际上,您可以单独进行测试:
>>> re.compile('p++')
error: multiple repeat
如果要将随机字符串放入正则表达式中,则需要调用re.escape
它们。
另一个问题(由于Ωmega):
.
regexp中的“任何字符”。因此,,|.|;|:"
(我刚刚提取了较长的替换链的一小段)意味着“逗号,任何字符,分号或冒号”……与“任何字符”相同。您可能想逃脱.
。
将所有三个修复程序放在一起:
term = 'lg incite" OR author:"http++www.dealitem.com" OR "for sale'
regexPart1 = r"\s"
regexPart2 = r"(?:s|'s|!+|,|\.|;|:|\(|\)|\"|\?+)?\s"
p = re.compile(regexPart1 + re.escape(term) + regexPart2 , re.IGNORECASE)
正如Ωmega在评论中所指出的那样,如果它们都是一个字符长,则不需要使用一系列替换。角色类也会做得更好,更简洁,更易读。
而且我敢肯定,还有其他方法可以改善这一点。
我已经试了好几个小时了,我觉得是时候放弃了。如何循环XML中定义的AnimatorSet? 我在单个上尝试了、和的几十种组合,但这不是正确的方法。 但它就是不起作用:被调用一次,动画被重复,然后就不再被调用了。 这里的其他类似问题涉及错误答案(指框架),或者建议为单个定义自定义插值器,但这并不是我真正要找的。谢谢你。
问题内容: 这个问题已经在这里有了答案 : 第二次遍历文件不起作用 (4个答案) 去年关闭。 我正在编写一个程序,要求我多次遍历文件的每一行: 为了简洁起见,我假设我总是需要遍历文件并每行打印5次。该代码与我在程序中实现的较长版本存在相同的问题:文件仅迭代一次。之后,该文件不执行任何操作。为什么是这样? 问题答案: 这是因为该行在循环之前仅出现一次。这将创建一个指向文件中一个位置的游标,因此,当您
我有一个表,需要删除整个行,其中ID发生第二次和以后的时间,但留下第一次出现suCustoriID顺便说一下。M表的ID是主键,CustometID是重复的。因此,我需要删除所有重复的自定义ID行。 上面的代码将删除所有id,包括每个id的第一次出现,但我需要保留它们的第一次出现。请告知。
问题内容: 在我的一个Angular控制器中,我有这个: 在另一个控制器中,我有这个: 现在,这是一个单页应用程序。当我最初进入控制器A并尝试触发此事件时, someAction() 将被执行一次。如果我离开并再次返回到控制器A并执行相同的操作,则 someAction() 将执行两次。如果我再做一次,它会发生3次,依此类推。我在做什么错呢? 问题答案: 你可以尝试使用吗?每次创建控制器A时,它都
我正在创建一个Laravel/最新版本的应用程序,它需要创建数百个sql表来服务于此项工作。还有数百个客户机的数据将被多次插入这些表中(每个客户机1000行或某些表中更多)。为了消除混淆,我需要一个通用/通用数据库来提供公共信息,并为每个客户机提供单独的数据库来提供特定信息,并且希望在添加客户机时创建新的数据库。这可以在Laravel(一次处理多个数据库)中实现,还是有其他PHP框架可以更好地实现
我想将正则表达式和两个单词之间的结果传输到数组中,但不幸的是我不能这样做。你能帮我吗? 在这篇文章中 我将搜索此内容, 基于此,我写了这样一个正则表达式 然而,这样,它需要整体,而不是一块一块。 先谢谢你的帮助。
我被问到一个面试问题,要求我返回数组中重复次数最多的数字,例如,{1,1,2,3,4}返回1。 我首先在hashtable中提出了一种方法,它要求空间复杂度O(n)。然后我说先对数组排序,然后遍历它,然后我们就可以找到数字了。 有什么优化吗? 谢了。
在C语言中使用多个间接指针声明的最大限制是什么? 例如,如下所示 使用运算符的最大限制是什么?