如何使用以“()”作为分隔符的re模块拆分字符串?

2024-09-27 17:46:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些行存储在像这样的txt文件中。你知道吗

A()定义A

土豚的定义

这些定义只是暂时的占位符,因为实际的定义很长。 所以我想用(“这里的任何单词”)作为分隔符来拆分这些字符串。但我的代码似乎不起作用。你知道吗

import re

f1=open("A-shortened.txt","r")
l=f1.readlines()
#print l


for i in l:
    list=re.split("\(()')",i)
    print list

里面的部分重新拆分让我很困惑。我试过许多论点,但似乎没有一个能像我所希望的那样一分为二。你知道吗

感谢您的帮助。你知道吗


Tags: 文件字符串代码importretxt定义open
3条回答

分隔符必须与要在之间删除的字符串部分相匹配。这有点棘手,因为()是组字符,但这里是:

text = 'Aardvark (n.) Definition of Aardvark'
re.split(r'\s*\([^)]*\)\s*', text)

r''防止任何意外的反斜杠转义。这不要紧,但安全总比抱歉好。你知道吗

\(\)匹配文字()。你知道吗

[^)]匹配除右括号以外的任何内容。注意:这里没有反斜杠转义。你知道吗

\s*在分隔符的方括号部分之前和之后生成任何空格,这样分割的部分就不会以空格开头。如果需要这些空间,请简化为r'\([^)]*\)'。你知道吗

您需要按一个打开的paren、任意数量的非关闭paren字符和一个关闭paren进行拆分。所以你的正则表达式应该是这样的:

split_by = re.compile(r"""
    \(                   # literal open paren
    [^)]*?               # anything but a close paren, repeated 0+ times (non-greedy)
    \)                   # literal close paren""", re.X)

s = "Aardvark (n.) Definition of Aardvark"
split_by.split(s)  # ["Aardvark ", " Definition of Aardvark"]

如果你也想占据这些空间:

re.split(r"\s*\([^)]*?\)\s*", s)

将正则表达式更改为如下内容:

>>> s = 'Aardvark (n.) Definition of Aardvark'
>>> re.split(r'\s*\(.*?\)\s*', s)
['Aardvark', 'Definition of Aardvark']

'\s*\(.*?\)\s*'基本上是指:匹配所有可能的空格,后跟()周围的任何空格,以及之后所有可能的空格。你知道吗

相关问题 更多 >

    热门问题