- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要拆分文本并只获取单词、数字和带连字符的组合词。我还需要学习拉丁语单词,然后我使用了 \p{L}
,它给出了 é、ú ü ã 等等。例子是:
String myText = "Some latin text with symbols, ? 987 (A la pointe sud-est de l'île se dresse la cathédrale Notre-Dame qui fut lors de son achèvement en 1330 l'une des plus grandes cathédrales d'occident) : ! @ # $ % ^& * ( ) + - _ #$% " ' : ; > < / \ | , here some is wrong… * + () e -"
Pattern pattern = Pattern.compile("[^\\p{L}+(\\-\\p{L}+)*\\d]+");
String words[] = pattern.split( myText );
这个正则表达式有什么问题?为什么它匹配 "("
、"+"
、"-"
、"*"
和 "|"
?
一些结果是:
dresse // OK
sud-est // OK
occident) // WRONG
987 // OK
() // WRONG
(a // WRONG
* // WRONG
- // WRONG
+ // WRONG
( // WRONG
| // WRONG
正则表达式的解释是:
[^\p{L}+(\-\p{L}+)*\d]+
* Word separator will be:
* [^ ... ] No sequence in:
* \p{L}+ Any latin letter
* (\-\p{L}+)* Optionally hyphenated
* \d or numbers
* [ ... ]+ once or more.
最佳答案
如果我对你的要求的理解是正确的,这个正则表达式将匹配你想要的:
"\\p{IsLatin}+(?:-\\p{IsLatin}+)*|\\d+"
它将匹配:
\p{L}
将匹配 any 文字中的字母。如果您的 Java 版本不支持该语法,请将 \\p{IsLatin}
更改为 \\pL
。上面的regex是通过调用Pattern.compile
来使用的,调用matcher(String input)
得到一个Matcher
对象,并使用循环查找匹配项。
Pattern pattern = Pattern.compile("\\p{IsLatin}+(?:-\\p{IsLatin}+)*|\\d+");
Matcher matcher = pattern.matcher(inputString);
while (matcher.find()) {
System.out.println(matcher.group());
}
如果你想允许带撇号的单词 '
:
"\\p{IsLatin}+(?:['\\-]\\p{IsLatin}+)*|\\d+"
我还在字符类 ['\\-]
中转义了 -
以防万一你想添加更多。实际上,如果 -
是字符类中的第一个或最后一个,则不需要转义,但为了安全起见,我还是对其进行了转义。
关于java - 带符号的拉丁正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14833001/
我对UDF pig 拉丁有问题。 我正在尝试实现一个系统,该系统必须验证本地存储的矩阵与hadoop存储库中存储的一组矩阵之间是否存在“映射”。 对于映射,我的意思是在hadoop中是否存在一个存储矩
数据库的排序规则用法是什么?好吧,对于 HTML UTF-8,我知道一点,比如显示其他语言类型。但是对于数据库呢?我正在使用 latin-1(默认),我的 friend 告诉我改用 UTF。当我问为什
我有以下带有架构的数据 (t0: chararray,t1: int,t2: int) (B,4,2) (A,2,3) (A,3,2) (B,2,2) (A,1,2) (B,1,2) 我想生成以下结果
我正在尝试构建 AOSP 拉丁 IME(源代码:https://android.googlesource.com/platform/packages/inputmethods/LatinIME/+/m
我正在实现过滤器功能。我使用以下方法定义字符串是否适合查询: someString.IndexOf(someSearch, StringComparison.OrdinalIgnoreCase) >=
我是一名优秀的程序员,十分优秀!