python - 如何使用此正则表达式模式提取子字符串?它给出了一个 ValueError: too many values to unpack (expected 1)
问题描述
import re, random, os, datetime, time
from os import remove
from unicodedata import normalize
from glob import glob
def learn_in_real_time(input_text, text):
#Quita acentos y demas diacríticos excepto la ñ
input_text = re.sub(
r"([^n\u0300-\u036f]|n(?!\u0303(?![\u0300-\u036f])))[\u0300-\u036f]+", r"\1",
normalize("NFD", input_text), 0, re.I
)
input_text = normalize( 'NFC', input_text) # -> NFC
input_text_to_check = input_text.lower() #Convierte a minuscula todo
words = []
words_associations = []
regex_what_who = r"(.*)\¿?(que sabes|que sabias|que sabrias|que te referis|que te refieres|que te referias|que te habias referido|que habias referido|a que|que|quienes|quien)\s*(con que|con lo que|con la que|con|acerca de que|acerca de quienes|acerca de quien|sobre de que|sobre que|sobre de quienes|sobre quienes|sobre de quien|sobre quien|)\s*(son|sean|es|serian|seria)\s*(iguales|igual|similares|similar|parecidos|parecido|comparables|comparable|asociables|asociable|distinguibles|distinguible|distintos|distinto|diferentes|diferente|diferenciables|diferenciable|)\s*(a |del |de |)\s*((?:\w+\s*)+)?"
l = re.search(regex_what_who, input_text_to_check, re.IGNORECASE) #Con esto valido la regex haber si entra o no en el bloque de code
if l:
#print("C")
association, = l.groups()
association = association.strip()
association_check = association + "\n" #Uso estas para las comparaciones, ya que sino las consideraria erroneamente como palabras que no estan en la lista solo por no tener el \n
return text
return text
我需要它来提取 ((?: \W + \ s *) +) 中的单词并将其作为字符串保存到变量中,但问题是它给了我这个错误:
Traceback (most recent call last):
File "answer_about_learned_in_txt.py", line 106, in <module>
print(learn_in_real_time(input_t, text))
File "answer_about_learned_in_txt.py", line 72, in learn_in_real_time
association, = l.groups()
ValueError: too many values to unpack (expected 1)
如何提取 ((?: \W + \ s *) +) 中的所有内容,并将其保存在变量中?
现在利用我问我将如何做:
a) 提取 ((?: \W + \ s *) +) 中的所有内容,如果有空格,它不会剪切并保存所有内容,例如:“你好,你好吗?”
b) 提取 ((?: \W + \ s *) +) 中的所有内容,但最多保存第一个空格,例如:“Hello”
我的问题是,如果我输入以下内容,元组的第 6 位就不会抓住我
if l:
#print("C")
#association, = l.groups()
print(l.groups())
association, _temp = l.group(6)
它给了我这个错误
File "answer_about_learned_in_txt.py", line 74, in learn_in_real_time
association, _temp = l.group(6)
ValueError: not enough values to unpack (expected 2, got 0)
In the end I was able to solve it with the following
如果你输入
阙子洛斯彗星
print (l.groups ())
('', 'que', '', '儿子', '', '', '洛斯彗星')
我对元组的第七个位置感兴趣,从 1 开始计数
association = l.group (7)
这给了我:
'洛斯彗星'
解决方案
让我们将模式字符串更新为逻辑视图并遵循主要功能。
regex_what_who = r"(que sabes|que sabias|que sabrias|que te referis|que te refieres|que te referias|que te habias referido|que habias referido|a que|que|quienes|quien|con que|con lo que|con la que|con|acerca de que|acerca de quienes|acerca de quien|sobre de que|sobre que|sobre de quienes|sobre quienes|sobre de quien|sobre quien|son|sean|es|serian|seria|iguales|igual|similares|similar|parecidos|parecido|comparables|comparable|asociables|asociable|distinguibles|distinguible|distintos|distinto|diferentes|diferente|diferenciables|diferenciable).*(a|del|de)\s*((?:\w+\s*)+)?"
然后,如果我们得到一个或多个结果,则修复错误第一个错误:
association, _temp = l.groups()
推荐阅读
- java - 在不接触 XML 字符的情况下取消转义 HTML
- ios - iOS:以字节为单位的 UIImage 大小与实际图像大小不同
- c++ - 只加密文件的前 512 个字节
- xml - 将 2 个 xslt 合并为一个
- javascript - window.functionName 在我的代码中未定义,而在开发人员工具控制台中定义
- php - 将分类法添加到默认帖子类型和永久链接后,WordPress 帖子内容未加载
- java - HashSet 在添加新元素时会丢失旧元素
- kubernetes - 如何在 kubernetes 工作负载规范中找到不可变字段?
- ruby - 如何在ruby中生成父子嵌套数据结构
- datadog - 数据狗监视器设置