基于正则表达式拆分字符串
Posted
技术标签:
【中文标题】基于正则表达式拆分字符串【英文标题】:Split string based on regex 【发布时间】:2012-10-23 22:36:17 【问题描述】:用大写单词(在 Python 中)分割像 "HELLO there HOW are YOU"
这样的字符串的最佳方法是什么?
所以我最终会得到一个这样的数组:results = ['HELLO there', 'HOW are', 'YOU']
编辑:
我试过了:
p = re.compile("\b[A-Z]2,\b")
print p.split(page_text)
但它似乎不起作用。
【问题讨论】:
What have you tried? - 找不到re.split()
?
当你说某事不起作用时,你应该解释原因。你有例外吗? (如果是这样,发布整个异常)你得到错误的输出吗?
【参考方案1】:
您可以使用前瞻:
re.split(r'[ ](?=[A-Z]+\b)', input)
这将在每个空格处拆分,后跟一串以单词边界结尾的大写字母。
请注意,方括号只是为了便于阅读,也可以省略。
如果单词的第一个字母是大写就足够了(所以如果你也想在Hello
前面拆分),那就更容易了:
re.split(r'[ ](?=[A-Z])', input)
现在它在每个空格处拆分,后跟任何大写字母。
【讨论】:
如何更改re.split(r'[ ](?=[A-Z]+\b)', input)
使其找不到大写字母?例如。它不会匹配“A”?我试过re.split(r'[ ](?=[A-Z]2,+\b)', input)
。谢谢!
@JamesEggers 你的意思是你希望至少需要两个大写字母,这样你就不会在I
这样的词处分裂? re.split(r'[ ](?=[A-Z]2,\b)', input)
应该这样做。
我建议至少[ ]+
甚至\W+
来捕获更多的案例。不过,一个很好的答案。
我尝试了同样的方法。但是,拥有[ ]
对我不起作用。相反,我使用了\s
。对我有用的完整正则表达式是re.split("\s(?=[A-Z]+\s)", string)
【参考方案2】:
我建议
l = re.compile("(?<!^)\s+(?=[A-Z])(?!.\s)").split(s)
检查this demo。
【讨论】:
不使用 compile 会发生什么? 根据re docs,“大多数正则表达式操作都可用作模块级函数和 RegexObject 方法。这些函数是不需要您先编译正则表达式对象的快捷方式,但错过了一些微调参数。" 您可以使用前面引用的文档中提到的re.split(re.split(pattern, string, maxsplit=0, flags=0))
。【参考方案3】:
您的问题包含字符串文字"\b[A-Z]2,\b"
,
但是 \b
将意味着退格,因为没有 r 修饰符。
试试:r"\b[A-Z]2,\b"
。
【讨论】:
以上是关于基于正则表达式拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章
Pandas使用split函数基于指定分隔符拆分数据列的内容为列表设置expand参数将拆分结果列表内容转化为多列数据并添加到原数据中replace函数基于正则表达式替换字符串数据列中的匹配内容