将简单Ruby正则表达式转换为Java
在与Ruby中断了几年之后,我将返回Java。我正在寻找实现以下Ruby语句的惯用且简短的Java代码:将简单Ruby正则表达式转换为Java,java,ruby,regex,Java,Ruby,Regex,在与Ruby中断了几年之后,我将返回Java。我正在寻找实现以下Ruby语句的惯用且简短的Java代码: some_string.scan(/[\w|\']+/) 上面的表达式从字符串创建数组。数组中的元素是由字母数字字符(\w)或撇号(\')组成的某些字符串的所有部分,因此“John”不会被拆分为两个单词。) 例如: “(农夫的女儿)去了市场”。扫描(/[\w| \']+/) => [“那个”、“农民的”、“女儿”和……] 更新 我知道解决方案将使用以下内容: String[]单词=句子。拆
some_string.scan(/[\w|\']+/)
上面的表达式从字符串创建数组。数组中的元素是由字母数字字符(\w
)或撇号(\'
)组成的某些字符串的所有部分,因此“John”不会被拆分为两个单词。)
例如:
“(农夫的女儿)去了市场”。扫描(/[\w| \']+/)
=>
[“那个”、“农民的”、“女儿”和……]
更新
我知道解决方案将使用以下内容:
String[]单词=句子。拆分(“”)代码>
我只需要split()
正则表达式中的regex部分,即使跨语言,其行为也应该大致相同。在这种情况下,唯一的区别是您必须转义反斜杠和单引号
如果用Ruby编写/[\w']+/
,用Java编写Pattern.compile(“[\\w\']+”)
哦,也是
这不是完全相同的事情,但是为什么不使用空格上的字符串呢?空格是单词的边界
"The farmer's daughter went to the market".split("\s");
正则表达式的行为应该或多或少相同,即使在不同的语言中也是如此。在这种情况下,唯一的区别是您必须转义反斜杠和单引号
如果用Ruby编写/[\w']+/
,用Java编写Pattern.compile(“[\\w\']+”)
哦,也是
这不是完全相同的事情,但是为什么不使用空格上的字符串呢?空格是单词的边界
"The farmer's daughter went to the market".split("\s");
怎么样
String[] words = test.split("[^a-zA-Z0-9']+");
或
这些模式与Ruby示例的不同之处在于,您使用的是Ruby的String#scan,即提供与单词匹配的模式。Java的String#split与Ruby的同名方法类似——您提供与单词分隔符匹配的模式。如何
String[] words = test.split("[^a-zA-Z0-9']+");
或
这些模式与Ruby示例的不同之处在于,您使用的是Ruby的String#scan,即提供与单词匹配的模式。Java的String#split与Ruby的同名方法类似——您提供与单词分隔符匹配的模式。Java没有内置的scan
方法可以在函数调用中执行此操作,因此您需要自己滚动循环。使用Java的regexMatcher
类可以很容易地做到这一点
import java.util.regex.*;
String yourString = "(The farmer's daughter) went to the supermarket";
/* The regex syntax is basically identical to Ruby, except that you need
* to specify your regex as a normal string literal, and therefore you need to
* double up on your backslashes. The other differences between my regex and
* yours are all things that I think you need to change about the Ruby version
* as well. */
Pattern p = Pattern.compile("[\\w']+");
Matcher m = p.matcher(yourString);
List<String> words = new Vector<String>();
while (m.find()) {
words.add(m.group());
}
import java.util.regex.*;
String yourString=“(农夫的女儿)去了超市”;
/*regex语法基本上与Ruby相同,只是需要
*将正则表达式指定为普通字符串文字,因此需要
*把你的后睫毛加倍。我的正则表达式和
*我认为你需要改变Ruby版本的所有东西
*还有*/
模式p=模式.compile(“[\\w']+”);
Matcher m=p.Matcher(您的字符串);
列出单词=新向量();
while(m.find()){
添加(m.group());
}
我不确定在这种情况下使用Matcher
与使用Scanner
的相对优点是什么 Java没有内置的scan
方法可以在函数调用中实现这一点,因此您需要自己滚动循环。使用Java的regexMatcher
类可以很容易地做到这一点
import java.util.regex.*;
String yourString = "(The farmer's daughter) went to the supermarket";
/* The regex syntax is basically identical to Ruby, except that you need
* to specify your regex as a normal string literal, and therefore you need to
* double up on your backslashes. The other differences between my regex and
* yours are all things that I think you need to change about the Ruby version
* as well. */
Pattern p = Pattern.compile("[\\w']+");
Matcher m = p.matcher(yourString);
List<String> words = new Vector<String>();
while (m.find()) {
words.add(m.group());
}
import java.util.regex.*;
String yourString=“(农夫的女儿)去了超市”;
/*regex语法基本上与Ruby相同,只是需要
*将正则表达式指定为普通字符串文字,因此需要
*把你的后睫毛加倍。我的正则表达式和
*我认为你需要改变Ruby版本的所有东西
*还有*/
模式p=模式.compile(“[\\w']+”);
Matcher m=p.Matcher(您的字符串);
列出单词=新向量();
while(m.find()){
添加(m.group());
}
我不确定在这种情况下使用Matcher
与使用Scanner
的相对优点是什么 我知道java和java中的正则表达式,但我看不出Ruby正则表达式在做什么。你能用语言说出来吗?:)字符类中不需要|(用括号括起来[]
),也不需要转义”
。正则表达式/[\w']+/
是正确的,而你的是错误的。我知道java中的java和正则表达式,但我看不出你的Ruby正则表达式在做什么。你能用语言说出来吗?:)字符类中不需要|(用括号括起来[]
),也不需要转义”
。正则表达式/[\w']+/
是正确的,而您的是错误的。这非常接近。我知道我需要使用.split,我只需要正则表达式过滤掉除撇号以外的非字母字符。@bevanb,我刚刚学会了使用字符串s。看看它是否能解决你的问题。另外,方括号内的
是不必要的。Ruby中的正则表达式应该是/[\w']+/
,Java中的等效正则表达式是“[\\w']+”
@MatheusMoreira,感谢您指出
是不必要的。这非常接近。我知道我需要使用.split,我只需要正则表达式过滤掉除撇号以外的非字母字符。@bevanb,我刚刚学会了使用字符串s。看看它是否能解决你的问题。此外,方括号内的
是不必要的。Ruby中的正则表达式应该是/[\w']+/
,Java中的等效正则表达式是“[\\w']+”
@MatheusMoreira,感谢您指出
是不必要的。