我有一些字符串,里面有各种不同的表情符号/图像/符号.
并非所有字符串都是英文的 - 其中一些字符串是其他非拉丁语言,例如:
? railway??
? Cats and dogs
I'm on
Apples ?
? Vi sign
? I'm the king ?
Corée ? du Nord ? (French)
gjør at både ?? (Norwegian)
Star me ?
Star ? once more
??? ? (Chinese)
???????? ? (Greek)
another ? sign ?
?????? ?????? ? (Belarus)
? ??? ?????? ? (Hindi)
? ? ? ? Let's get together ?. We shall meet at 12/10/2018 10:00 AM at Tony's.?
Run Code Online (Sandbox Code Playgroud)
......还有更多这些.
我想摆脱所有这些标志/图像,只保留不同语言的字母(和标点符号).
我尝试使用EmojiParser库 …
对于一个穷人在客户端实现近似校正正确的排序,我需要一个JavaScript函数来在字符串中进行有效的单个字符替换.
这就是我的意思(请注意,这适用于德语文本,其他语言的排序方式不同):
native sorting gets it wrong: a b c o u z ä ö ü collation-correct would be: a ä b c o ö u ü z
基本上,我需要将所有出现的给定字符串的"ä"替换为"a"(依此类推).这样,本机排序的结果将非常接近用户期望的结果(或数据库将返回的内容).
其他语言有这样的设施:Python提供str.translate(),在Perl中tr/…/…/,XPath有一个函数translate(),ColdFusion有ReplaceList().但是JavaScript呢?
这就是我现在所拥有的.
// s would be a rather short string (something like
// 200 characters at max, most of the time much less)
function makeSortString(s) {
var translate = {
"ä": "a", "ö": "o", "ü": …Run Code Online (Sandbox Code Playgroud) 我试图弄清楚正则表达式将匹配任何不是字母或数字的字符.所以字符如(,, @,£,()等...
一旦找到,我想用空格替换它.
任何建议.
这是我今天遇到的一个有趣的片段:
/\ba/.test("a") --> true
/\bà/.test("à") --> false
Run Code Online (Sandbox Code Playgroud)
然而,
/à/.test("à") --> true
Run Code Online (Sandbox Code Playgroud)
首先,wtf?
其次,如果我想在单词的开头匹配重音字符,我该怎么做?(我真的很想避免使用过顶选择器/(?:^|\s|'|\(\) ....)
我需要将姓氏列表转换为字母数字用户名,但不幸的是其中一些包含非ascii字符:
Hernández
Quermançós
Migueláñez
Run Code Online (Sandbox Code Playgroud)
现在,一种方法就是使用正则表达式删除任何非字母数字字符,例如a.replace(/[^a-z0-9]/gi,'').然而,一个更直观的解决方案(至少对于用户来说)将用他们的"普通"等效替换重音字符,例如转á,á进a和ç进c等等.有没有一种简单的方法在javascript中执行此操作?
现在我的正则表达式是这样的:
[a-zA-Z0-9]但它不包括我想要的重音字符.我也想 - ',包括在内.
我有一个JavaScript正则表达式,基本上找到两个字母的单词.问题似乎是它将重音字符解释为单词边界.的确,似乎是这样
单词边界("\ b")是两个字符之间的一个点,在它的一边有一个"\ w",另一边有一个"\ W"(按任意顺序),计算出假想的字符字符串的开头和结尾匹配"\ W". AS3 RegExp用于匹配其中包含边界类型字符的单词
从那以后
\ w匹配任何字母数字字符(单词字符),包括下划线([a-zA-Z0-9_]的缩写).\ W匹配任何非单词字符([^ a-zA-Z0-9_]的缩写) http://www.javascriptkit.com/javatutors/redev2.shtml
显然重音字符不被考虑在内.这就像是一个问题Montréal.如果é被认为是单词边界,则al是两个字母的单词.我已经尝试自己定义一个允许重音字符的单词边界,但是看作单词边界甚至不是一个字符,我不知道如何去寻找它.
有帮助吗?
以下是相关的JavaScript代码,userInput使用re_state正则表达式搜索和查找双字母单词:
var re_state = new RegExp("\\b([a-z]{2})[,]?\\b", "mi");
var match_state = re_state.exec(userInput);
document.getElementById("state").value = (match_state)?match_state[1]:"";
Run Code Online (Sandbox Code Playgroud) 我得到以下字符串:
String line = "#food was testy. #drink lots of. #night was fab. #three #four";
Run Code Online (Sandbox Code Playgroud)
我想借此#food #drink #night #three和#four从它.
我试过这段代码:
String[] words = line.split("#");
for (String word: words) {
System.out.println(word);
}
Run Code Online (Sandbox Code Playgroud)
但它给food was testy,drink lots of,nigth was fab,three和four.
我执行以下操作:
\n\nre.sub(r'[^ \\nA-Za-z0-9/]+', '', document)\nRun Code Online (Sandbox Code Playgroud)\n\n删除除字母数字、空格、换行符或正斜杠之外的所有字符。
\n\n所以我基本上想删除除换行符和正斜杠之外的所有特殊字符。
\n\n但是,我不想删除各种语言(例如法语、德语等)中的重音字母。
\n\n但是如果我运行上面的代码,那么例如这个词
\n\nMot\xc3\xb6rhead
变成
\n\nMotrhead
我不想这样做。
\n\n那么如何运行上面的代码而不删除重音字母呢?
\n\n更新:
\n\n下面的@MattM提出了一个解决方案,该解决方案适用于英语、法语、德语等语言,但它肯定不适用于波兰语等语言,因为波兰语中所有重音字母仍被删除。
\n#!/usr/bin/perl -T
use strict;
use warnings;
use utf8;
my $s = shift || die;
$s =~ s/[^A-Za-z ]//g;
print "$s\n";
exit;
> ./poc.pl "El Guapö"
El Guap
Run Code Online (Sandbox Code Playgroud)
有没有办法修改这个Perl代码,以便不删除各种变音符号和字符重音?谢谢!
regex ×6
javascript ×5
string ×4
diacritics ×3
java ×2
collation ×1
emoji ×1
extraction ×1
nlp ×1
perl ×1
python ×1
sorting ×1
unicode ×1
utf-8 ×1