正则表达式:如何在某些情况下仅通过撇号分隔字符串

时间:2015-10-19 23:00:08

标签: regex

我希望将字符串中的第一个字母大写。我已经设法通过阅读这里的例子来组合一些东西。但是,我试图获得任何以O'分成2个字符串,以便每个字符串大写。到目前为止我有这个:

\b([^\W_\d](?!')[^\s-]*) *

省略了选择X'从任何字符串X' XYZ。这适用于在'之后将部分资本化,但不会使X'大写。此外,由于它不是特定于O'因此我变成了我。说明目标: o'马利应该去O&#; Malley o' malley应该去O&#;; Malley's 不应该去Don 我应该去找我 (顺便说一句,我想省略任何以数字开头的字符串,比如23F,这似乎与我所拥有的一致) 如何使其特定于以O'开头的字符串? THX

1 个答案:

答案 0 :(得分:1)

如果您使用以下模式:

([oO])'([\w']+)|([\w']+)

然后你可以通过调用:

来访问每个单词
match[0] == 'o' || match[1] == 'name' #if word is "o'name"
match[2] == 'word' #if word is "word"

如果它是上述两个中的一个,那么其他的将是空白的,即如果word == "word"那么

match[0] == match[1] == ""

因为没有o'前缀。

测试示例:

>>> import re
>>> string = "o'malley don't i'm hello world"
>>> match = re.findall(r"([oO])'([\w']+)|([\w']+)",string)
>>> match
[('o', 'malley', ''), ('', '', "don't"), ('', '', "i'm"), ('', '', 'hello'), ('', '', 'world')]

注意:这是用于python的。这可能不适用于所有发动机。