在python中,如何替换出现在另一个单词之前的单词

在python中,如何替换出现在另一个单词之前的单词,python,text,Python,Text,如果单词a出现在运算符之前,我想用另一个单词B替换文本字符串中的单词a。单词A可以是任何单词。 例如: 由于Not出现在运算符==之前,因此我想将其替换为alist[Not] 所以,上面的句子应该改为 Hi I am alist["Not"] == you 另一个例子 My height > your height 应该成为 My alist["height"] > your height 编辑: 根据@Paul的建议,我将自己编写的代码。 它能用,但太笨重了,我对它不满意 o

如果单词a出现在运算符之前,我想用另一个单词B替换文本字符串中的单词a。单词A可以是任何单词。 例如:

由于Not出现在运算符==之前,因此我想将其替换为alist[Not] 所以,上面的句子应该改为

Hi I am alist["Not"] == you
另一个例子

My height > your height
应该成为

My alist["height"] > your height
编辑: 根据@Paul的建议,我将自己编写的代码。 它能用,但太笨重了,我对它不满意

operators = ["==", ">", "<", "!="]        
    text_list = text.split(" ")
    for index in range(len(text_list)):           
        if text_list[index] in operators:
            prev = text_list[index - 1]
            if "." in prev:
                tokens = prev.split(".")
                prev = "alist"
                for token in tokens:
                    prev = "%s[\"%s\"]" % (prev, token)
            else:
                prev = "alist[\"%s\"]" % prev
            text_list[index - 1] = prev
    text = " ".join(text_list)

这可以使用正则表达式来完成

import re
...
def replacement(match):
    return "alist[\"{}\"]".format(match.group(0))
...
re.sub(r"[^ ]+(?= +==)", replacement, s)
如果本例中不需要单词和==之间的空格,则最后一行变为:

re.sub(r"[^ ]+(?= *==)", replacement, s)
我强烈建议您研究正则表达式及其python实现,因为它们非常有用

我的解决方案说明:

subpattern,replacement,s用给定的字符串或函数的输出替换作为正则表达式给出的模式的出现

我使用一个函数的输出,将整个匹配对象放入“alist[…]”构造中。match.group0返回整个匹配项

[^]匹配除空格以外的任何内容

+尽可能多地匹配最后一个子模式,但至少匹配一次

*尽可能经常地匹配最后一个子模式,但这是可选的

?=。。。这是一个前瞻。它检查当前光标位置后的内容是否与括号内的模式匹配,但不包括在最终匹配中,至少不包括在.group0中,如果您在lookahead中有组,这些都可以通过.groupindex进行检索。

您可以尝试使用“我能够为您的问题创建一个简单的解决方案”,如下所示

import re
data = "Hi I am Not == You"
x = re.search(r'(\w+) ==', data)
print(x.groups())
在这段代码中,re.search查找1个或多个字母数字字符后跟运算符==的模式,并将结果Hi I Not==存储在变量x中

然后,对于Swap,您可以使用建议的re.sub方法


我还建议学习如何使用正则表达式,因为它们对解决许多不同的问题都很有用,而且在不同的编程语言之间也很相似

您尝试过什么吗。密码这样我们才能更好地帮助你way@PaulRooney-我已使用我的方法编辑了问题。请从问题中删除“暂停”我不能。您应该单击“重新打开”按钮。如果有足够多的评论者同意,它将重新打开。嗨,欢迎来到StackOverflow!请阅读并尝试提供一些有关代码的信息和上下文。谢谢。虽然这个代码片段可以解决这个问题,但它确实有助于提高您文章的质量。请记住,您将在将来回答读者的问题,而这些人可能不知道您的代码建议的原因。谢谢@anurag jain,但这是一种非常暴力的解决方法。我正在寻找一个两行的解决方案,应该可以使用re.subtanks作为响应。谢谢@alec-c我一直在学习并忘记正则表达式语法:DNo问题很乐意帮助!
str = "Hi I am Not == you"
s = str.split()
y = ''
str2 = ''
for x in s:
    if x in "==":
        str2 = str.replace(y, 'alist["'+y+'"]')
        break
    y = x

print(str2)
str = "Hi I am Not == you"
s = str.split()
y = ''
str2 = ''
for x in s:
    if x in "==":
        str2 = str.replace(y, 'alist["'+y+'"]')
        break
    y = x

print(str2)