我需要一个regex来提取句子中的所有名字(我们将认为它们都是以大写字母开头的单词,并且在它们出现在句子中之前具有某些条件).这必须根据我在下面阐明的模式来完成,还必须提取该名称之前和之后的内容,以便它可以打印在该序列或模式中提取的名称的旁边.


这是我需要的伪正则表达式模式:

the beginning of the input sentence or (,|;|.|y)

associated_sense_1: "some character string (alphanumeric)" or "nothing"

(con |juntos a |junto a |en compania de )

identified_person: "some word that starts with a capital letter (the name that I must extract)" and it ends when the regex find one or more space

associated_sense_2: "some character string (alphanumeric)" or "nothing"

the end o the input sentence or (,|;|.|y |con |juntos a |junto a |en compania de )

(,|;|.|y)只是用于构建正则表达式模式的Person连接符,但它们只提供指示归属顺序的信息,然后可以用.replace( , "")删除它们

使用这个正则表达式,我需要提取这3 string groups

associated_sense_1

identified_person

associated_sense_2


associated_sense = associated_sense_1 + " " + associated_sense_2

这是原码:

import re

#Example 1
sense = "puede ser peligroso ir solas, quizas sea mejor ir con Adrian y seguro que luego podemos esperar por Melisa, Marcos y Lucy en la parada"
#Example 2
#sense = "Adrian ya esta en la parada; y alli probablemente esten Lucy y May en la parada esperandonos"

person_identify_pattern = r"\s*(con |por |, y |, |,y |y )\s*[A-Z][^A-Z]*"
#person_identify_pattern = r"\s*(con |por |, y |, |,y |y )\s*[^A-Z]*"


for identified_person in re.split(person_identify_pattern, sense):
    identified_person = identified_person.strip()
    if identified_person:
        try:
            print(f"Write '{associated_sense}' to {identified_person}.txt")
        except:
            associated_sense = identified_person

我得到的输出是错误的.

Write 'puede ser peligroso ir solas, quizas sea mejor ir' to con.txt
Write 'puede ser peligroso ir solas, quizas sea mejor ir' to Melisa.txt
Write 'puede ser peligroso ir solas, quizas sea mejor ir' to ,.txt
Write 'puede ser peligroso ir solas, quizas sea mejor ir' to Lucy en la parada.txt

example 1的正确输出:

Write 'quizas sea mejor ir con' to Adrian.txt
Write 'y seguro que luego podemos esperar por en la parada' to Melisa.txt
Write 'y seguro que luego podemos esperar por en la parada' to Marcos.txt
Write 'y seguro que luego podemos esperar por en la parada' to Lucy.txt

example 2的正确输出:

Write 'ya esta en la parada' to Adrian.txt
Write 'alli probablemente esten en la parada esperandonos' to Lucy.txt
Write 'alli probablemente esten en la parada esperandonos' to May.txt

我正在try 使用另一个正则表达式,但我仍然在使用此代码时遇到问题:

import re

sense = "puede ser peligroso ir solas, quizas sea mejor ir con Adrian y seguro que luego podemos esperar por Melisa, Marcos y Lucy en la parada"

person_identify_pattern = r"\s*(?:,|;|.|y |con |juntos a |junto a |en compania de |)\s*((?:\w\s*)+)\s*(?<=con|por|a, | y )\s*([A-Z].*?\b)\s*((?:\w\s*)+)\s*(?:,|;|.|y |con |juntos a |junto a |en compania de )\s*"

for m in re.split(person_identify_pattern, sense):
    m = m.strip()
    if m:
        try:
            print(f"Write '{content}' to {m}.txt")
        except:
            content = m

但我一直收到错误的输出

Write 'puede ser peligroso ir solas' to quizas sea mejor ir con Adrian y seguro que luego podemos esperar por.txt
Write 'puede ser peligroso ir solas' to Melisa,.txt
Write 'puede ser peligroso ir solas' to Marcos y Lucy en la parad.txt

推荐答案

import re

sense = "puede ser peligroso ir solas, quizas sea mejor ir con Adrian y seguro que luego podemos esperar por Melisa, Marcos y Lucy en la parada"
if match := re.findall(r"(?<=con|por|a, | y )\s*([A-Z].*?\b)", sense):
    print(match)

Itsult = [ '阿德里安' , '梅利萨' , ' Marcos ' , ' Lucy ' ]

Python相关问答推荐

连接两个具有不同标题的收件箱

Pandas 滚动最接近的价值

如何让剧作家等待Python中出现特定cookie(然后返回它)?

使可滚动框架在tkinter环境中看起来自然

在Mac上安装ipython

运输问题分支定界法&

如何从pandas的rame类继承并使用filepath实例化

使用NeuralProphet绘制置信区间时出错

改进大型数据集的框架性能

使用Python和文件进行模糊输出

与命令行相比,相同的Python代码在Companyter Notebook中运行速度慢20倍

如何将数据帧中的timedelta转换为datetime

从旋转的DF查询非NaN值

Autocad使用pyautocad/comtypes将对象从一个图形复制到另一个图形

PySpark:如何最有效地读取不同列位置的多个CSV文件

按条件计算将记录拆分成两条记录

仅取消堆叠最后三列

我可以同时更改多个图像吗?

IpyWidget Select 框未打开

这是什么排序算法?(将迭代器与自身合并&&Q;)