Regex 如何使用python编写正则表达式来搜索和替换字符串?

Regex 如何使用python编写正则表达式来搜索和替换字符串?,regex,python-3.x,Regex,Python 3.x,这是一个可复制的例子,说明了需要什么。假设我们有wordHIV/AIDS。我的问题是如何编写正则表达式来搜索这样的字符串,并用字符串替换它HIV\u AIDS 这是我能够编写的搜索模式。这在实践中是好的吗 txt='DDD/VCD' #python 3.x re1='((?:[a-z][a-z0-9_]*))' # Variable Name 1 re2='(\\/)' # Any Single Character 1 re3='((?:[a-z][a-z0-9_]*))' # Variab

这是一个可复制的例子,说明了需要什么。假设我们有word
HIV/AIDS
。我的问题是如何编写正则表达式来搜索这样的字符串,并用字符串替换它
HIV\u AIDS

这是我能够编写的搜索模式。这在实践中是好的吗

txt='DDD/VCD'  #python 3.x

re1='((?:[a-z][a-z0-9_]*))' # Variable Name 1
re2='(\\/)' # Any Single Character 1
re3='((?:[a-z][a-z0-9_]*))' # Variable Name 2

rg = re.compile(re1+re2+re3,re.IGNORECASE|re.DOTALL)
m = rg.search(txt)

if m:
var1=m.group(1)
c1=m.group(2)
var2=m.group(3)
print ("("+var1+")"+"("+c1+")"+"("+var2+")"+"\n")
如果我上面的代码足够好,那么请帮助我编写进一步的代码来替换字符串(我已经在上面提到过的示例)


我还是正则表达式的初学者,希望使用python-3.5x及更高版本为此编写一个简单的正则表达式。我在python中找到了re库,但我试图在不使用该库的情况下编写它。任何帮助都将不胜感激。谢谢。

您可以使用
re.sub
功能。只有当编译器找到匹配项时,才应进行替换,否则它将返回输入字符串而不进行任何修改

>>> re.sub(r'(?i)\b([a-z][a-z0-9_]*)/([a-z][a-z0-9_]*)\b', r'\1_\2', 'DDD/VCD')
'DDD_VCD'
>>> 

如有必要,编译正则表达式

reg = re.compile(r'(?i)\b([a-z][a-z0-9_]*)/([a-z][a-z0-9_]*)\b')
reg.sub(r'\1_\2', 'DDD/VCD')

\b
单词边界有助于将单词字符与非单词字符分开,或者(反之亦然)

您可以使用
re.sub
功能。只有当编译器找到匹配项时,才应进行替换,否则它将返回输入字符串而不进行任何修改

>>> re.sub(r'(?i)\b([a-z][a-z0-9_]*)/([a-z][a-z0-9_]*)\b', r'\1_\2', 'DDD/VCD')
'DDD_VCD'
>>> 

如有必要,编译正则表达式

reg = re.compile(r'(?i)\b([a-z][a-z0-9_]*)/([a-z][a-z0-9_]*)\b')
reg.sub(r'\1_\2', 'DDD/VCD')


\b
单词边界有助于将单词字符与非单词字符分开,或者(反之亦然)

这可能更适合。”[I]想编写一个简单的正则表达式……我正在尝试在不使用库的情况下编写它“这应该如何工作?”?您想编写自己的正则表达式引擎吗?或者你想在没有正则表达式的情况下编写正则表达式?@tobias_k我的意思是通过使用if/else条件匹配并替换它们来直接编写正则表达式。我想问你,编写正则表达式或使用像“re”这样的库是一种更好的方法吗?没有re库就不能使用正则表达式。这可能更适合于想要写一个简单的正则表达式…我正在尝试不使用库来写它“这应该如何工作?”?您想编写自己的正则表达式引擎吗?或者你想在没有正则表达式的情况下使用它?@tobias_k我的意思是通过使用if/else条件匹配并替换它们来直接编写正则表达式。我想问你,这是编写正则表达式或使用“re”这样的库的更好方法吗这是一种很好的方法吗?如果没有re库,就不能使用正则表达式。有必要编译正则表达式吗?为什么要在reg变量结尾处\b。请帮助我理解它。我理解其余的规则。如果你愿意在很多地方使用相同的正则表达式,那么最好编译它。如果您想在运行中执行,那么使用第一个选项。在普通用例中不需要编译正则表达式:虽然编译成本很高,
re
模块本身保留最近使用的正则表达式的缓存,因此它不会重新编译循环中使用的正则表达式或频繁调用的函数。(对于单次使用,也没有任何区别)。只有使用数百个可能被重用的动态生成的regexp的代码才能利用自定义机制来缓存预编译的regexp。是否需要编译regex?以及为什么\b在reg变量的末尾。请帮助我理解它。我理解其余的规则。如果你愿意在很多地方使用相同的正则表达式,那么最好编译它。如果您想在运行中执行,那么使用第一个选项。在普通用例中不需要编译正则表达式:虽然编译成本很高,
re
模块本身保留最近使用的正则表达式的缓存,因此它不会重新编译循环中使用的正则表达式或频繁调用的函数。(对于单次使用,也没有任何区别)。只有使用数百个可能被重用的动态生成的regexp的代码才会受益于缓存预编译regexp的自定义机制。