当前位置: 首页 > 知识库问答 >
问题:

使用regex在字符串中查找子字

傅树
2023-03-14

工作解决方案:

import re
import sys

lines = sys.stdin.readlines()

n=int(lines[0])
q=int(lines[n+1])

N=lines[1:n+1]
S=lines[n+2:]

text = "\n".join(N)
for s in S:
    print(len(re.findall(r"(?<!\W)(?="+s.strip()+r"\w)", text)))

破“解”:

import re
import sys

lines = sys.stdin.readlines()

n=int(lines[0])
q=int(lines[n+1])

N=lines[1:n+1]
S=lines[n+2:]

for s in S:
    total=0
    for string in N:
        total += len(re.findall("(?<!\W)(?="+s.strip()+"\w)", string))
    print(total)

我们将单词字符定义为以下任一项:

    null
    null

第一行包含一个整数n,表示句子的数目。后面的每一行都包含一个由非单词字符分隔的单词组成的句子。下一行包含一个整数,表示查询的数量。后续行中的每一行都包含一个要检查的字符串。

制约因素

  • 1≤n≤100
  • 1≤q≤10
1
existing pessimist optimist this is
1
is
3
  • 作为现有的子字出现时间。
  • 作为悲观主义者的子词出现时间。
  • 作为Optimist的子词出现时间。
  • while是单词this的子字符串,后面跟着一个空格;因为空白不是字母、数字,也不是下划线,所以我们不将其作为子字出现项计算。
  • 虽然is是句子中单词is的子串,但我们不将其算作匹配,因为在句子中,它的前面和后面都有非单词字符(即空格)。这意味着它不能算作子字出现。

接下来,我们将所有单词的子单词的出现次数加起来为1+1+1+0+0=3。因此,我们在新的行上打印3。

共有1个答案

龙枫
2023-03-14

>

  • 如果不将字符串指定为原始字符串,regex元字符实际上会被解释为特殊的转义字符,并且模式不会像您预期的那样匹配。

    由于不再在多行字符串内部查找,因此需要将修改负查找后面添加到正查找后面:(?<=\w)

    正如Wiktor在他的评论中提到的,转义s.strip将是一个好主意,这样可以将任何可能被视为regex元字符的字符转义并按字面意思表示。您可以使用re.escape(s.stripe())

    total += len(re.findall(r"(?<\w)(?=" + re.escape(s.strip()) + r"\w)", string))
    

  •  类似资料:
    • 问题内容: 使用正则表达式的python中的代码可以执行类似这样的操作 谢谢 问题答案: 这是您需要做的所有事情: 正如叶立昂指出:(我几乎引用) 是的“非贪婪”版本。它使正则表达式匹配的字符数最少,而不是最多。贪婪的版本会给出字符串;非贪婪版本‘String 1,String 2,String3’ 另外(再次使用Johan,),如果您想接受空字符串,请更改为。星号表示零个或多个-加号表示至少一个

    • 问题 你需要搜索一个字符串,并返回匹配的起始位置或匹配值本身。 解决方案 有几种使用正则表达式的方法来实现这个功能。其中一些方法被称为 RegExp 模式或对象还有一些方法被称为 String 对象。 RegExp 对象 第一种方式是在 RegExp 模式或对象中调用 test 方法。test 方法返回一个布尔值: match = /sample/.test("Sample text") # =>

    • 问题 你想在一条消息中查找某个关键字第一次或最后一次出现的位置。 解决方案 分别使用 JavaScript 的 indexOf() 和 lastIndexOf() 方法查找字符串第一次和最后一次出现的位置。语法: string.indexOf searchstring, start message = "This is a test string. This has a repeat or two

    • 问题内容: 我正在寻找一种在字符串中查找JSON数据的方法。像wordpress简码一样思考它。我认为最好的方法是使用正则表达式。我不想解析JSON,只需查找所有出现的事件。 正则表达式中是否有办法使括号的数量匹配?目前,当我嵌套对象时遇到了这个问题。 演示的快速示例: 结果,我想要两个JSON字符串。谢谢! 问题答案: 从给定的文本中提取JSON字符串 由于您正在寻找一种简单的解决方案,因此可以

    • 问题内容: 我有: 功能: 和一个字符串:, 我本质上是想输入并返回,但是我却不断地返回。 码: 不知道怎么了! 问题答案: 理想情况下,您会 像痴呆的刺猬说的那样 使用 str.find 或 str.index 。但是你说你不能… 您的问题是您的代码仅搜索搜索字符串的第一个字符(第一个字符在索引2)。 您基本上是说if是in ,递增直到我测试它返回3时,但这仍然是错误的。这是一种方法。 它产生了

    • 我正在尝试使用正则表达式替换单词。但不管用。 我试图只替换有一个点的单词(.)