代码之家  ›  专栏  ›  技术社区  ›  Petr Petrov

正则表达式:查找文本中的所有子字符串

  •  1
  • Petr Petrov  · 技术社区  · 8 年前

    我有一段很长的文字,这是他们的一部分

    C: state name of the Company in Russian: [03_SNYuLOOO IC "Story Group".]
    ). - [04_MNMestablishment of the Company: 107S64, Russian Federation, Moscow, 
    ul. Krasnobogatyrskaya, 2, is built.
    2, floor 3. com. 11. Office B].
    

    我需要像这样查找所有子字符串:

    [03_SNYuLOOO IC "Story Group".]
    [04_MNMestablishment of the Company: 107S64, Russian Federation, Moscow, 
    ul. Krasnobogatyrskaya, 2, is built.
    2, floor 3. com. 11. Office B]
    

    我尝试使用

    re.findall(r'^\[\d{2}_[\s\S]+\]$', text)
    

    但它返回空列表。 我做错了什么?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Wiktor Stribiżew    8 年前

    这个 ^ 和 $ 锚需要整个字符串与模式匹配 [\s\S]+ 尽可能多地匹配任何1个以上的字符,抓住任何 [ 和 ] 在去字符串末尾的路上,所以最后 ] 将匹配最右边的 ] 在字符串中。

    您可以使用以下正则表达式:

    r'\[\d{2}_[^]]+]'
    

    请参见 regex demo

    细节

    • \[ -文字 [
    • \d{2} -两位数
    • _ -下划线
    • [^]]+ -一个或多个字符,而不是 ]
    • ] -文字 ] .

    请参见 Python demo :

    import re
    s='''C: state name of the Company in Russian: [03_SNYuLOOO IC "Story Group".]
    ). - [04_MNMestablishment of the Company: 107S64, Russian Federation, Moscow, 
    ul. Krasnobogatyrskaya, 2, is built.
    2, floor 3. com. 11. Office B].'''
    print(re.findall(r'\[\d{2}_[^]]+]', s))
    # => ['[03_SNYuLOOO IC "Story Group".]', '[04_MNMestablishment of the Company: 107S64, Russian Federation, Moscow, \nul. Krasnobogatyrskaya, 2, is built.\n2, floor 3. com. 11. Office B]']