正则表达式如何匹配转义字符 \x1b - V2EX
请不要在回答技术问题时复制粘贴 AI 生成的内容
chaleaochexist

正则表达式如何匹配转义字符 \x1b

  •  
  •   chaleaochexist Sep 8, 2023 1706 views
    This topic created in 998 days ago, the information mentioned may be changed or developed.

    \x1b 是 linux terminal 和颜色相关的一个前缀

    我从 ssh 读出数据做正则匹配 抓到的数据如下:

    login: Fri Sep 8 15:48:31 2023 from 127.0.0.1\r\r\n\x1b[?2004h\x1b[1;38m[v12.22.9]\x1b[0m\x1b[1;38mchaleaoch@wsl$:\x1b[ 

    https://regex101.com/

    上看是能匹配的. \\x1b\[[0-9;]*[mK] 0jf8je.png 但是这个正则放在程序里提示匹配失败.

    如果改成这样 .*\[[0-9;]*[mK] 提示成功

    如果改成这样 (.)\[[0-9;]*[mK] 也提示成功 且(.)对应的字符串是\x1b

    6fnlk3.png

    我的问题是如果不用通配符, 我应该如何表达这个转义字符.

    Supplement 1    Sep 8, 2023
    这个解释起来有点麻烦,
    感兴趣的热心大佬可以试一下登录自己的 ssh 服务器 用 python 或者 golang
    然后将 output 输出看一下 然后抓一下\x1b 或者\033

    前提是你的$PS1 是带颜色的.
    Supplement 2    Sep 8, 2023
    谢谢大佬们 是我阅读不仔细. 尤其感谢 3 楼 和 9 楼
    leaflxh
        1
    leaflxh  
       Sep 8, 2023
    import re

    s = "login: Fri Sep 8 15:48:31 2023 from 127.0.0.1\r\r\n\x1b[?2004h\x1b[1;38m[v12.22.9]\x1b[0m\x1b[1;38mchaleaoch@wsl$:\x1b["

    r = re.compile(r"\x1b\[[0-9;]*[mK]")
    #或者 r = re.compile("\\x1b\\[[0-9;]*[mK]")

    print(r.findall(s))
    ['\x1b[1;38m', '\x1b[0m', '\x1b[1;38m']
    leaflxh
        2
    leaflxh  
       Sep 8, 2023
    提版本号
    r = re.compile("\\x1b\\[[0-9;]*[mK](.*?)\\x1b\\[[0-9;]*[mK]")
    >>> print(r.findall(s))
    ['[v12.22.9]']
    yuankui
        3
    yuankui  
       Sep 8, 2023   1
    ```
    >>> import re
    >>>
    >>> # 原始字符串
    >>> text = 'This is a string with \x1b some escape sequences \x1b[1;31m embedded.'
    >>> pattern = re.compile(r'\\x1b')
    >>>
    >>> matches = pattern.findall(text)
    >>>
    >>> print(matches)
    []
    >>>
    >>> pattern = re.compile(r'\x1b')
    >>> matches = pattern.findall(text)
    >>> print(matches)
    ['\x1b', '\x1b']
    ```
    YGHMXFAL
        4
    YGHMXFAL  
       Sep 8, 2023
    (\\x1b)\[[[:digit:];]*m

    然后\1 就是\x1b

    另外"放在程序里提示匹配失败",这个"程序"是啥?它本身会不会还有转义反斜杠的动作?如果是,你需要再多转义一次

    regex 表达式-->你的程序-->regex 解析器,你需要保证,经过你的程序(可能存在转义动作)之后,传递给 regex 解析器的依然是你以为得那个表达式,尤其是在交互式 shell 中
    yuankui
        5
    yuankui  
       Sep 8, 2023   1
    你应该想法搞清楚 r'\x1b' 和 u'\x1b' 的区别
    chaleaochexist
        6
    chaleaochexist  
    OP
       Sep 8, 2023
    @leaflxh
    @yuankui
    @YGHMXFAL

    如果 像你们这么写, 我正文中就不用描述的真麻烦了 直接给出 代码示例就好了

    问题就是这个 \x1b 不是纯文本.
    不过还是谢谢你们的回复.


    @yuankui 大佬我觉得你说的有道理 能直接给个例子吗
    zzl22100048
        7
    zzl22100048  
       Sep 8, 2023   1
    import re
    msg=b"login: Fri Sep 8 15:48:31 2023 from 127.0.0.1\r\r\n\x1b[?2004h\x1b[1;38m[v12.22.9]\x1b[0m\x1b[1;38mchaleaoch@wsl$:\x1b["
    print_msg=msg.decode('utf-8')
    print(print_msg)
    for item in re.findall(rb'\x1b\[[0-9;]*[mK]', msg):
    >>print(item.decode('utf-8')+'abc')


    没问题啊,终端输出 bytes ,直接用 rb 匹配
    qeqv
        8
    qeqv  
       Sep 8, 2023   1
    最前面的反斜杠去掉
    \x1b\[[0-9;]*[mK]
    Belmode
        9
    Belmode  
       Sep 8, 2023   1
    编程语言入门问题...

    #3 #5 好好看看你就就明白了
    NessajCN
        10
    NessajCN  
       Sep 8, 2023 via Android
    不同语言对 unicode 字符的正则语法有区别的
    qeqv
        11
    qeqv  
       Sep 8, 2023   1
    字符串转义可以处理 \x1b 为对应 ASCII 字符,正则引擎也可以处理,所以不需要管这个字符。
    你应该注意的是后面的 \[ ,由于要完整输入 \[ 到正则引擎,所以如果字符串会被转义,那就得 \\[ ,如果不会被转义,就直接 \[
    About     Help     Advertise     Blog     API     FAQ     Solana     4282 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 43ms UTC 10:12 PVG 18:12 LAX 03:12 JFK 06:12
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86