使用regex(Python)在特定的字符序列后拆分字符串



我有一个从文本文件中提取的消息字符串列表,所有这些消息看起来都是这样的:

s = 'Nov 1 11 45 AM Jane Doe hi

我需要它看起来像这样:

'Nov 1 11 45 AM, Jane Doe, hi'

我把它作为我的代码,因为首先我正在处理时间和名称的拆分,然后我计划分别处理名称和消息:

rx = re.compile(r'B(AM|PM)s')
r=rx.split(s)

但它打印的是:

'Nov 1 11 45 ', 'AM', 'Jane Doe hi'

关于如何在分隔符后拆分有什么想法吗?

谢谢!

假设您也需要在多次出现之后进行拆分,并且您没有在"Doe"之后或"hi"之前进行拆分:

s = 'Want to split AM with some PM and more'
split_after = ['AM', 'PM']
rx = re.compile(rf'(?<=({"|".join(split_after)}))[^b]')
result = ', '.join(x for x in rx.split(s) if x not in split_after)

结果将是:

'Want to split AM, with some PM, and more'

像这样使用re.sub

import re
s = 'Nov 1 11 45 AM Jane Doe hi'
# Partial solution:
foo = re.sub(r'(AM|PM)', '\1,', s)
print(foo)
# Nov 1 11 45 AM, Jane Doe hi
# Complete solution:
bar = re.sub(r'(AM|PM)(s+S+s+S+)', '\1,\2,', s)
print(bar)
# Nov 1 11 45 AM, Jane Doe, hi

r'(AM|PM)':匹配AMPM,并将其存储在匹配变量1中,然后再次转义(\1(并在替换字符串中使用
r'(AM|PM)(s+S+s+S+)':匹配AMPM,然后是一个或多个空白字符,再匹配一个或更多个非空白字符,然后再次匹配。将结果存储在匹配变量12中。请注意,匹配变量是根据左括号的位置从左到右进行编号的。

这里有一个将行分为两部分的示例:日期和其余部分还有一个例子可以得到3个部分:日期、名称(2个单词(,其余部分是消息

import re
s = 'Nov 1 11 45 AM Jane Doe hi to all of you'
rx = re.compile(r'(.*AM|PM)(.*)')
r=rx.findall(s)
print(r)

结果是:

[('Nov 1 11 45 AM', ' Jane Doe hi to all of you')]

这个例子展示了如何获得3个部分:日期、名称(2个单词(,其余部分是消息

rx = re.compile(r'(.*AM|PM)(.+? .+?) (.*)')
r=rx.findall(s)
print(r)

结果是:

[('Nov 1 11 45 AM', ' Jane Doe', 'hi to all of you')]

相关内容

  • 没有找到相关文章

最新更新