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

时间:2014-03-29 01:34:02

标签: python regex

我正在尝试搜索并替换字符串中的某些模式。这些是我可能的模式,

  1. 在提供的字符串中,在模式-A'1.3.6.1.4.1.6536.2.7.0 s'之后,您可以在双引号中看到一个字符串(可以包含所有可能的特殊字符,包括多个DOUBLE QUOTE)。在模式-B“1.3.6.1.4.1.6536.2.13.0”之前,字符串的末尾用另一个双引号提到。
  2. 我想将模式A之后的DOUBLE QUOTE替换为SINGLE QUOTE,将模式B之前的DOUBLE QUOTE替换为另一个单引号。
  3. 问题是模式-B不是常数值,也可能是行尾。但是,在模式B之前会有一个双引号。
  4. 另外,我希望字符串的其余部分与原样相同。
  5. 我的字符串:

    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"'

    需要输出:

    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"

1 个答案:

答案 0 :(得分:0)

我建议使用群组参考来解决这个问题。

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

在你的情况下:

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"\.")

并将它们替换为正则表达式