Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何只保留句子中最后出现的字符?_Regex_Python 3.x - Fatal编程技术网

Regex 如何只保留句子中最后出现的字符?

Regex 如何只保留句子中最后出现的字符?,regex,python-3.x,Regex,Python 3.x,我试图把这句话分成两栏(评论和感想) 让我们假设我们有一句话: 嗨。。。我每小时挣7.50美元,即每小时7.50美元。肯定的 在这里,“积极”是情绪,前者是评论 i) 我无法使用\s作为分隔符将句子分成两列(回顾、感想) ii)如果我使用“.”作为分隔符,则句子中会多次出现“.” 我已经编写了一个代码来删除多次出现的“.”和 代码如下: def clean(sentence): clear = re.sub(r"[,|\"|\"|\'|\'|\-|!|?|\/|*|:|\\|\(|\)|;|

我试图把这句话分成两栏(评论和感想)

让我们假设我们有一句话:

嗨。。。我每小时挣7.50美元,即每小时7.50美元。肯定的

在这里,“积极”是情绪,前者是评论

i) 我无法使用\s作为分隔符将句子分成两列(回顾、感想) ii)如果我使用“.”作为分隔符,则句子中会多次出现“.”

我已经编写了一个代码来删除多次出现的“.”和 代码如下:

def clean(sentence):
  clear = re.sub(r"[,|\"|\"|\'|\'|\-|!|?|\/|*|:|\\|\(|\)|;|$]",'', sentence)
  clear1 = re.sub(r'(\W)\1+',' ', clear)
  [' '.join(clear1.split())]
可以删除“hi”后的“…”,但不能删除“i.e”和“$7.50”

我期望的结果是:

回顾:嗨,我每小时挣7.50分,即7.50小时
情绪:积极的

我的输出是:

嗨,我每小时挣7.50分,即7.50小时

PS:我使用pandas将其作为两列的数据帧加载

Edit1:就我而言,我的情绪包含“积极”或“消极”。

Edit2:我将此输出存储为csv文件,如果情绪仅为“积极”或“消极”,我将使用pandas(read_csv())进行阅读。那么

def clean(sentence):
    tokens = sentence.split()
    return " ".join(tokens[:-1]), tokens[-1]
这将产生一个元组

('Hi... I earn 7 dot 50 per hour i.e $7.50/hr.', 'Positive')

在您的情况下,正如您所知,情绪总是“积极”或“消极”,您可以得到如下两列:

m = re.match(r"(?P<review>.*)\. (?P<sentiment>Positive|Negative)$", sentence)
m.group('review')
m.group('sentiment')
m=re.match(r“(?P.*)\(?对动|否定)$”,句子)
m、 集团(“审查”)
m、 团体(“情绪”)

如果您只需要最后出现的点符号,可以使用以下正则表达式:

\.(?!.*\.)
示例:

怎么样

仅当后跟
正数
负数

import re

sentence = 'Hi... I earn 7 dot 50 per hour i.e $7.50/hr. Positive'
res = re.split(r'\s+(?=Positive|Negative)', sentence)
print(res)
输出:

['Hi... I earn 7 dot 50 per hour i.e $7.50/hr.', 'Positive']

查找所有单词字符组并使用以下列表:

>>> import re
>>> l = re.findall(r'\w+', s)
>>> ' '.join(l[:-1])
'Hi I earn 7 dot 50 per hour i e 7 50 hr'
>>> l[-1]
'Positive'

你能用
\.\s*(?=[^.]*$)
(最后一个点)拆分吗?可能重复的或,
df['col'].str.extract(r'^(.*)\s*(正|负)\s*$)
?可能不是完全重复的,但那里的答案将帮助你找到最后一个
字符,从那里你可以很容易地得到它前面和后面的所有字符。为什么在这种情况完全不同的情况下,它被标记为可能的重复?