Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby正则表达式,用于提取不包含空格的字符串中的单词_Ruby_Regex - Fatal编程技术网

Ruby正则表达式,用于提取不包含空格的字符串中的单词

Ruby正则表达式,用于提取不包含空格的字符串中的单词,ruby,regex,Ruby,Regex,假设我有字符串str=ASimpleNoSpaceTitle。我似乎不知道如何使用regexp拆分和提取所有大写单词,以便得到[A,Simple,No,Space,Title] 什么是正则表达式可以完成这项工作 更新:有空格和没有空格/大写的一串单词怎么样?如SimpleNoSpaceTitle和[a,Simple,No,Space,Title,and,a,subtitle]的副标题使用with可以通过简单易懂的正则表达式获得所需的内容: str = "ASimpleNoSpaceTitle"

假设我有字符串str=ASimpleNoSpaceTitle。我似乎不知道如何使用regexp拆分和提取所有大写单词,以便得到[A,Simple,No,Space,Title]

什么是正则表达式可以完成这项工作

更新:有空格和没有空格/大写的一串单词怎么样?如SimpleNoSpaceTitle和[a,Simple,No,Space,Title,and,a,subtitle]的副标题

使用with可以通过简单易懂的正则表达式获得所需的内容:

str = "ASimpleNoSpaceTitle"
str.scan(/[A-Z][a-z]*/) # => ["A", "Simple", "No", "Space", "Title"]
您可以使用POSIX括号表达式[[:upper:]和[[:lower:],这将允许您的正则表达式也处理非ASCII字母,例如Àorç:

str = "ÀSimpleNoSpaçeTitle"
str.scan(/[A-Z][a-z]*/) # => ["Simple", "No", "Spa", "Title"]
str.scan(/[[:upper:]][[:lower:]]*/) # => ["À", "Simple", "No", "Spaçe", "Title"]
若要允许单词在前面没有其他字母时以小写字母开头,可以使用以下变量:

str = "ASimpleNoSpaceTitle and a subtitle"
str.scan(/[A-Za-z][a-z]*/) # => ["A", "Simple", "No", "Space", "Title", "and", "a", "subtitle"]
# OR
str.scan(/[[:alpha:]][[:lower:]]*/)
使用with将通过简单易懂的正则表达式满足您的需求:

str = "ASimpleNoSpaceTitle"
str.scan(/[A-Z][a-z]*/) # => ["A", "Simple", "No", "Space", "Title"]
您可以使用POSIX括号表达式[[:upper:]和[[:lower:],这将允许您的正则表达式也处理非ASCII字母,例如Àorç:

str = "ÀSimpleNoSpaçeTitle"
str.scan(/[A-Z][a-z]*/) # => ["Simple", "No", "Spa", "Title"]
str.scan(/[[:upper:]][[:lower:]]*/) # => ["À", "Simple", "No", "Spaçe", "Title"]
若要允许单词在前面没有其他字母时以小写字母开头,可以使用以下变量:

str = "ASimpleNoSpaceTitle and a subtitle"
str.scan(/[A-Za-z][a-z]*/) # => ["A", "Simple", "No", "Space", "Title", "and", "a", "subtitle"]
# OR
str.scan(/[[:alpha:]][[:lower:]]*/)

这里有一种方法

在内置方法内传递此正则表达式

regext/[:upper:][]?:[[:lower:][]+/

正则表达式所做的一切就是找到一个大写字母[[:upper:]],该字母后面有一个小写字母?:[[:lower:]+

扫描将查找多个匹配字符串/char..etc

irb(main):001:0> str = "ASimpleNoSpaceTitle"
=> "ASimpleNoSpaceTitle"

irb(main):050:0> str.scan(/[[:upper:]](?:[[:lower:]]+)?/)
=> ["A", "Simple", "No", "Space", "Title"]
irb(main):051:0> 

这里有一种方法

在内置方法内传递此正则表达式

regext/[:upper:][]?:[[:lower:][]+/

正则表达式所做的一切就是找到一个大写字母[[:upper:]],该字母后面有一个小写字母?:[[:lower:]+

扫描将查找多个匹配字符串/char..etc

irb(main):001:0> str = "ASimpleNoSpaceTitle"
=> "ASimpleNoSpaceTitle"

irb(main):050:0> str.scan(/[[:upper:]](?:[[:lower:]]+)?/)
=> ["A", "Simple", "No", "Space", "Title"]
irb(main):051:0> 
?=[:upper:][]在正向前瞻中,要求匹配后面跟一个大写字母


?=[:upper:][]在积极的前瞻中,要求匹配后面跟一个大写字母。

在2016年这样做的正确方法是:

"ASimpleNoSpaceTitle and a subtitle".split(/(?=\p{Lu})|\s+/)
#⇒ ["A","Simple","No","Space","Title","and","a","subtitle"]

2016年实现这一目标的正确方法是:

"ASimpleNoSpaceTitle and a subtitle".split(/(?=\p{Lu})|\s+/)
#⇒ ["A","Simple","No","Space","Title","and","a","subtitle"]


嗯,我不知道Stringscan-那真的很有用。@SebastianLenartowicz Ruby核心类中有很多非常有用的方法,而且新的方法总是被引入。值得时不时浏览一下列表。谢谢,这很有效。我更新了这个问题,因为我想知道如何用一个有空格的字符串来做它。考虑替换……它们是由不是小写字母的东西来执行的。它们前面没有小写字母…,因为字符串开头的小写字母两者不一样。谢谢,Cary,你建议的措辞好多了。嗯,我不知道Stringscan——那真的很有用。@SebastianLenartowicz Ruby核心类中有很多非常有用的方法,而且新的方法总是被引入。值得时不时浏览一下列表。谢谢,这很有效。我更新了这个问题,因为我想知道如何用一个有空格的字符串来做它。考虑替换……它们是由不是小写字母的东西来执行的。with…,它们的前面没有小写字母…,因为字符串开头的小写单词两者不一样。谢谢,Cary,你建议的措辞要好得多。我很好奇为什么你会在可选的非捕获组中使用+运算符,而不仅仅是使用*运算符?只是想明确要求一个或多个较低的。但是,如果您选择要求一个或多个较低的值,则使用?在组之后,这与要求零或更多完全相同,不是吗?我很好奇为什么你会在可选的非捕获组中使用+运算符,而不仅仅是使用*运算符?只是想具体说明要求一个或多个较低值。但是如果你选择要求一个或多个较低值,你会使用?分组后,这与要求零或更多完全相同,不是吗?当我第一次读你的标题时,我以为你在暗示某些单词包含空格!:-如果任何一个答案都是有用的,请考虑选择一个。当我第一次读你的标题时,我认为你在暗示一些单词包含空格。如果有任何答案是有用的,请考虑选择一个。@ MuasasbWa,极好的观察!非常感谢。我做了编辑。读者:我以前有regex/??@mudasobwa,非常好的观察!非常感谢。我做了编辑。读者:我以前有regex/?我显式地调用POSIX括号表达式,例如[[:upper:]作为处理非ASCII字母的必要条件,甚至给出了结果差异的示例。我遗漏了什么吗?依我看,这是目前为止最好的答案,因为它以一种很好、简洁的方式处理OP的更新案例。@philom
我本该瞎的,请原谅,我已经从我的回答中删除了欺骗的句子。很抱歉。@mudasobwa一点问题都没有,我只是想澄清一下。感谢您的编辑。我明确地调用了POSIX括号表达式,例如[[:upper:]作为处理非ASCII字母的必要条件,甚至给出了结果差异的示例。我错过了什么吗?我想,这是迄今为止最好的答案,因为它以一种友好、简洁的方式处理OP的更新案例。@Phylomy我应该是瞎子,请原谅,我已经从我的答案中删除了欺骗性的句子。很抱歉。@mudasobwa一点问题都没有,我只是想澄清一下。谢谢你的编辑。