仅在Python中替换不带引号的单词
我正在寻找一种方法来取代一个词,但是只有当它没有被引用的时候 比如说 将仅在Python中替换不带引号的单词,python,Python,我正在寻找一种方法来取代一个词,但是只有当它没有被引用的时候 比如说 将Hello替换为Hi Hello'Hello'Nothing&rightarrowHi'Hello'Nothing 因为'Hello'在引号中,所以它不会被替换,但是第一个Hello会被替换,因为它没有用引号括起来 任何帮助都会很好 试试这个: import re def callback(match): rep = 'Hi' return match.group(1)+rep+match.group(2)
Hello
替换为Hi
Hello'Hello'Nothing
&rightarrowHi'Hello'Nothing
因为'Hello'
在引号中,所以它不会被替换,但是第一个Hello
会被替换,因为它没有用引号括起来
任何帮助都会很好 试试这个:
import re
def callback(match):
rep = 'Hi'
return match.group(1)+rep+match.group(2)
your_string = "Hello 'Hello' Nothing"
print re.sub("([^\']|^)Hello([^\']|$)", callback, your_string)
这将与单词Hello
匹配,该单词被除以外的任何内容所包围。
([]
中的^
表示除此之外的任何内容)。我还添加了|^
和|$
以匹配字符串末尾或开头的单词Hello
它将替换为括号中的第一个部分以及Hi和第二个部分(无论它们是什么)。考虑使用(这不是唯一的方法,但我同意)
[2]中的:打印
你好,你好,没什么
在[3]中:导入re
在[4]:re.sub(“(?使用子字符串函数查找要替换的单词的所有出现处,对于每个单词,查看子字符串函数返回内容之前的一个索引,并查看其是否为引号
“你好,你好,没什么”
Substring函数返回0——所以当然没有引号
子字符串函数返回6--检查字符串[5]--有一个引号,查找下一个文档
如何继续使用子字符串函数进行检查?类似以下内容:
startindex=0
while(!done):
index=substr(string, startindex)
if(str[index-1] == "'")
startindex=index
continue
从这里你会发现正则表达式非常棒:
>>>import re
>>>expression = re.compile("(?!(\"|'))Hello(?!(\"|'))")
>>>expression.sub("Hi",'This string says "Hello" and Hello')
This string says "Hello" and Hi
唯一的问题是它也无法替换“Hello and Hello”,如果这成为一个问题,您可以为它们添加特定的案例。这适用于您的测试案例
import re
foo = "Hello 'Hello' Nothing"
mt = re.search(r"[^']Hello(\s+.*)", foo)
if mt:
foo = 'Hi' + match.group(1)
使用正则表达式:
>>> import re
>>> re.sub(r'([^"\']|^)Hello([^"\']|$)', r'\1Hi\2', "Hello mate")
'Hi mate'
>>> re.sub(r'([^"\']|^)Hello([^"\']|$)', r'\1Hi\2', "'Hello' mate")
"'Hello' mate"
([^“\']\^)Hello([^“\']\$)”
表示“字符串Hello被不同于单引号或双引号的东西包围,或者在行的开头或结尾。”双引号或单引号?使用re.sub如何Hello'Hello Nothing'Nothing
?或者Hello这不起作用。
>>> import re
>>> re.sub(r'([^"\']|^)Hello([^"\']|$)', r'\1Hi\2', "Hello mate")
'Hi mate'
>>> re.sub(r'([^"\']|^)Hello([^"\']|$)', r'\1Hi\2', "'Hello' mate")
"'Hello' mate"