简体   繁体   English

Python正则表达式将双引号替换为字符串中的单引号

[英]python regex substitute double quote to single quote in a string

I am trying to search and replace some pattern in my string. 我正在尝试搜索并替换字符串中的某些模式。 These are my possible pattern, 这些是我可能的模式

  1. In the string provided, after the pattern-A '1.3.6.1.4.1.6536.2.7.0 s ' you can see a string(that can have all possible special characters including multiple DOUBLE QUOTE) with in double quote. 在提供的字符串中,在模式-A'1.3.6.1.4.1.6536.2.7.0 s'之后,您可以看到一个带有双引号的字符串(可以包含所有可能的特殊字符,包括多个DOUBLE QUOTE)。 The end of the string is mentioned with another double quote before the pattern-B "1.3.6.1.4.1.6536.2.13.0". 字符串的末尾在模式B“ 1.3.6.1.4.1.6536.2.13.0”之前用另一个双引号引起来。
  2. I want to replace the DOUBLE QUOTE after pattern-A to a SINGLE QUOTE and the DOUBLE QUOTE before pattern-B to another SINGLE QUOTE. 我想将模式A之后的双引号替换为一个单引号,并将模式B之后的双引号替换为另一个单引号。
  3. Problem is the pattern-B is not constant value or it may be the end of line. 问题是模式-B不是恒定值,或者它可能是行尾。 But, before the pattern B there will be a DOUBLE QUOTE. 但是,在模式B之前将有一个双引号。
  4. Also, I want the rest of the string to be same as it is. 另外,我希望字符串的其余部分保持原样。

my String: 我的字串:

10.88.141.220 1.3.6.1.4.1.6536 66.187.220.156 6 1 0 1.3.6.1.4.1.6536.2.6.0 s "CIPS" 1.3.6.1.4.1.6536.2.3.0 s "202.39.169.59" 1.3.6.1.4.1.6536.2.21.0 i 48215 1.3.6.1.4.1.6536.2.7.0 s "eventId=1384760064820340493 vendor=Cisco eventType=evIdsAlert hostId=eips1 appName=sensorApp appInstanceId=14679 tmTime=1396009683700 severity=5 interfaceGroup=vs0 Interface=PortChannel0/0 Protocol=tcp riskRatingValue=85 sigId=5842 version=S269 sigDetails="Solaris Telnet Authentication Bypass" src=134.174.9.66 srcDir=OUT_2019 srcport=48215 dst=202.39.169.59 dstDir=OUT_2019 dstport=23 attackerContext="//4B//4B//4B//4B//sf//ofAFAAGf/w//sY//oYAHZ0MTAw//D/+yf/+icA AFVTRVIBLWZhZG3/8P/7H//6HwBQABn/8P/7GP/6GAB2dDEwMP/w//sn//on AABVU0VSAS1mYWRt//A=" physical="Unknown" idSource="unknown" targetValueRating="medium" cid:threatRatingValue="85" cid:triggerPacket="KJQPjJVyxArLBNAACABFAABWz9JAADoGbXyGrglCyiepO7xX ABcQv8jxU+LBD1AZwhDkIAAA//sf//ofAFAAGf/w//sY//oYAHZ0MTAw//D/ +yf/+icAAFVTRVIBLWZhZG3/8E1rFeUW3O7ORTfY7vCmsOVPZnRS/nAFpJ9V aSE+SOSDiLtNtFly/FARHU1cRFWHjko2ld6T3P1lTF0n9KimbwHpTldifaO+ 3FFeTjaehynxnAH7+Sfz1vX9ENfn" context="single_vf" relevance="unknown" type="unknown" backplane="PortChannel0/0" alertDetails="InterfaceAttributes: context=single_vf physical=Unknown backplane=PortChannel0/0 ; "" 1.3.6.1.4.1.6536.2.13.0 s "Fri Mar 28 07:28:03 CDT 2014" 1.3.6.1.4.1.6536.2.10.0 s "170015" 1.3.6.1.4.1.6536.2.14.0 i 23 1.3.6.1.4.1.6536.2.9.0 s "CPY000000334577~STE000000021185" 1.3.6.1.4.1.6536.2.2.0 s "134.174.9.66" 1.3.6.1.4.1.6536.2.20.0 s "" 1.3.6.1.4.1.6536.2.18.0 s "" 1.3.6.1.4.1.6536.2.4.0 i 5 1.3.6.1.4.1.6536.2.1.0 s "NFE-p1-10:1389503591806-9627475421" 1.3.6.1.4.1.6536.2.11.0 s "Code Injection" 1.3.6.1.4.1.6536.2.8.0 s "eips1" 1.3.6.1.4.1.6536.2.5.0 i 1 1.3.6.1.4.1.6536.2.12.0 i 60 1.3.6.1.4.1.6536.2.17.0 s "Partners Healthcare" 1.3.6.1.4.1.6536.2.19.0 s "no related events" 1.3.6.1.4.1.6536.2.16.0 s "Solaris Telnet Authentication Bypass" 1.3.6.1.4.1.6536.2.15.0 s "5842"'

Output needed: 需要的输出:

10.88.141.220 1.3.6.1.4.1.6536 66.187.220.156 6 1 0 1.3.6.1.4.1.6536.2.6.0 s "CIPS" 1.3.6.1.4.1.6536.2.3.0 s "202.39.169.59" 1.3.6.1.4.1.6536.2.21.0 i 48215 1.3.6.1.4.1.6536.2.7.0 s 'eventId=1384760064820340493 vendor=Cisco eventType=evIdsAlert hostId=eips1 appName=sensorApp appInstanceId=14679 tmTime=1396009683700 severity=5 interfaceGroup=vs0 Interface=PortChannel0/0 Protocol=tcp riskRatingValue=85 sigId=5842 version=S269 sigDetails="Solaris Telnet Authentication Bypass" src=134.174.9.66 srcDir=OUT_2019 srcport=48215 dst=202.39.169.59 dstDir=OUT_2019 dstport=23 attackerContext="//4B//4B//4B//4B//sf//ofAFAAGf/w//sY//oYAHZ0MTAw//D/+yf/+icA AFVTRVIBLWZhZG3/8P/7H//6HwBQABn/8P/7GP/6GAB2dDEwMP/w//sn//on AABVU0VSAS1mYWRt//A=" physical="Unknown" idSource="unknown" targetValueRating="medium" cid:threatRatingValue="85" cid:triggerPacket="KJQPjJVyxArLBNAACABFAABWz9JAADoGbXyGrglCyiepO7xX ABcQv8jxU+LBD1AZwhDkIAAA//sf//ofAFAAGf/w//sY//oYAHZ0MTAw//D/ +yf/+icAAFVTRVIBLWZhZG3/8E1rFeUW3O7ORTfY7vCmsOVPZnRS/nAFpJ9V aSE+SOSDiLtNtFly/FARHU1cRFWHjko2ld6T3P1lTF0n9KimbwHpTldifaO+ 3FFeTjaehynxnAH7+Sfz1vX9ENfn" context="single_vf" relevance="unknown" type="unknown" backplane="PortChannel0/0" alertDetails="InterfaceAttributes: context=single_vf physical=Unknown backplane=PortChannel0/0 ; "' 1.3.6.1.4.1.6536.2.13.0 s "Fri Mar 28 07:28:03 CDT 2014" 1.3.6.1.4.1.6536.2.10.0 s "170015" 1.3.6.1.4.1.6536.2.14.0 i 23 1.3.6.1.4.1.6536.2.9.0 s "CPY000000334577~STE000000021185" 1.3.6.1.4.1.6536.2.2.0 s "134.174.9.66" 1.3.6.1.4.1.6536.2.20.0 s "" 1.3.6.1.4.1.6536.2.18.0 s "" 1.3.6.1.4.1.6536.2.4.0 i 5 1.3.6.1.4.1.6536.2.1.0 s "NFE-p1-10:1389503591806-9627475421" 1.3.6.1.4.1.6536.2.11.0 s "Code Injection" 1.3.6.1.4.1.6536.2.8.0 s "eips1" 1.3.6.1.4.1.6536.2.5.0 i 1 1.3.6.1.4.1.6536.2.12.0 i 60 1.3.6.1.4.1.6536.2.17.0 s "Partners Healthcare" 1.3.6.1.4.1.6536.2.19.0 s "no related events" 1.3.6.1.4.1.6536.2.16.0 s "Solaris Telnet Authentication Bypass" 1.3.6.1.4.1.6536.2.15.0 s "5842"

I suggest solving this using group references. 我建议使用组引用解决此问题。

re.sub(r'patternA"(.*?)"patternB', r"patternA'\1'patternB", myString)

In your case: 在您的情况下:

patternA = r'1.3.6.1.4.1.6536.2.7.0 s '
patternA = patternA.replace(".", r"\.") # escaping special character
patternB = r'1.3.6.1.4.1.6536.2.7.0 s '
patternB = patternB.replace(".", r"\.")

and substitute them in to the regex 并将它们代入正则表达式

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM