我正在try 让RegEx匹配对话中某个特定角色所说的所有单词.每一行都被格式化为"[name]:[Dialog]",所以在每一行的开头都有一个一致的标记来判断,但我不知道如何做到这一点.例如,如果我在看《罗密欧与朱丽叶》中的罗密欧对话,它会匹配《罗密欧:我爱你朱丽叶》中的每个词,但不会匹配《朱丽叶:我爱你罗密欧》中的任何一个词.

我认为唯一可能的解决方案是使用Lookback断言,我有(?<=NAME:[.*])\w+个,但这不会返回任何匹配.通过一些调试和查看其他答案,我发现问题出在添加[.*],特别是方括号.这就把我带到了(?<=^NAME:).*\w+,它几乎起作用了,但它匹配了整行对话,而不是单个单词.

在写这篇文章的时候看了一下复习题,我发现了this question,它的代码是\Aframe.*width\s(?<width>\d+)\sheight\s(?<height>\d+)\z.我try 将其修改为\ANAME:.*\w+\s(?<\w+>\d+)\s\z,然后又修改为\ANAME:.*\w+\s(?\w+\d+)\s\z,但两个都返回了关于第二个\w+的错误,理由是"糟糕的转义".然后我查看了this question,它的代码是(^@property|(?!^)\G)(.*? )\K([^-\n]\w+),但即使是没有任何修改的基本代码也返回了相同的"错误转义"错误.

推荐答案

如果行以给定的字符名称开头,则只需迭代各行并匹配所有单词:

import re

def get_character_words(character_name, dialogue):
  result = []
    
  for line in dialogue.splitlines():
    if line.startswith(character_name):
      result += re.findall(fr'\w+', line[len(character_name) + 2:])
    
  return result

试试看:

text = '''
Romeo: Shall I hear more, or shall I speak at this?
Juliet: ’Tis but thy name that is my enemy. Thou art thyself, though not a Montague. What’s Montague? It is nor hand, nor foot, Nor arm, nor face. O, be some other name Belonging to a man. What’s in a name? That which we call a rose
Romeo: Call me but love, and I’ll be new baptized. Henceforth I never will be Romeo.
'''

print(get_character_words('Romeo', text))

'''
[
  'Shall', 'I', 'hear', 'more', 'or', 'shall', 'I', 'speak', 'at', 'this',
  'Call', 'me', 'but', 'love', 'and', 'I', 'll', 'be', 'new', 'baptized',
  'Henceforth', 'I', 'never', 'will', 'be', 'Romeo'
]
'''

Python相关问答推荐

返回nxon矩阵的diag元素,而不使用for循环

如何从.cgi网站刮一张表到rame?

Stacked bar chart from billrame

在vscode上使用Python虚拟环境时((env))

使用Python更新字典中的值

在ubuntu上安装dlib时出错

计算分布的标准差

考虑到同一天和前2天的前2个数值,如何估算电力时间序列数据中的缺失值?

Django admin Csrf令牌未设置

try 检索blob名称列表时出现错误填充错误""

如何使用两个关键函数来排序一个多索引框架?

为什么常规操作不以其就地对应操作为基础?

如何获取Python synsets列表的第一个内容?

关于两个表达式的区别

在Docker容器(Alpine)上运行的Python应用程序中读取. accdb数据库

BeautifulSoup-Screper有时运行得很好,很健壮--但有时它失败了::可能这里需要一些更多的异常处理?

使用嵌套对象字段的Qdrant过滤

在Pandas 中以十六进制显示/打印列?

无法使用请求模块从网页上抓取一些产品的名称

大Pandas 中的群体交叉融合