我有这样一个正则表达式:"[a-z|A-Z|0-9]: "
,它将匹配一个字母数字字符、冒号和空格。我想知道如何拆分字符串,但在拆分的第一个结果中保留字母数字字符。我无法更改正则表达式,因为在某些情况下,字符串在冒号和空格之前会有特殊字符
例如:
line = re.split("[a-z|A-Z|0-9]: ", "A: ") # Result: ['A', '']
line = re.split("[a-z|A-Z|0-9]: ", ":: )5: ") # Result: [':: )5', '']
line = re.split("[a-z|A-Z|0-9]: ", "Delicious :): I want to eat this again") # Result: ['Delicious :)', 'I want to eat this again']
更新:
实际上,我的问题是从审阅文件中拆分。假设我有一个文件,每行都有这样的模式:[title]: [review]
。我想获得标题和评论,但有些标题在冒号和空格前有一个特殊字符,我不想匹配它们。然而,我想匹配的冒号和空格前的字符显然是字母数字字符
您可以使用带单个冒号的负号lookback进行拆分,或者使用字符类
[:)]
,在该类中可以指定哪些字符不应直接出现在左侧部分地
(?<!:)
负查找,断言左边的不是冒号:[ ]
匹配冒号后跟空格(仅为清晰起见添加方括号)Regex demoPython demo
比如说
输出
解决方案
首先,正如您在示例中所示,您需要匹配除
a-zA-Z0-9
之外的字符,因此我们应该只使用.
匹配器,它将匹配每个字符所以我认为你想要的表达可能是:
您可以这样使用它:
解释
我们使用捕获组(括号)将字符串中的不同部分分成不同的组,
search
然后找到这些组并将它们输出到元组中{}部分被称为“负前瞻”,我们使用它来确保从找到的最后一个{}开始捕获
编辑
顺便说一句,如果如您所提到的,您有许多行,每行都包含一篇评论,那么您可以使用此代码段一次将所有评论按标题和正文分开:
相关问题 更多 >
编程相关推荐