2017-02-23 108 views
1

我有大约1300宜家产品列表中标记的话 - 这是一些人的例子:我试图使用正则表达式来标记那些包含“特殊”有特殊字符

läkt 
bigarrå 
bekväm 
blixt 
block 
blom 
bärbar 
bärby 
bästis 
bådalen 
bågvik 

字符 - 例如不是简单的一个小写的任何其他小写ž - 如:

läkt 
bigarrå 
bekväm 
bärbar 
bärby 
bästis 
bådalen 
bågvik 

我想这一个:

[^a-z] 

但它选择了所有的话。

我可以做到这一点,如果我只是使用PHP,通过ctype_alnum函数,但在这里我只是使用TextPad或NotePad ++文本编辑器。

有没有什么办法可以使用标准RegEx来实现?

+0

在记事本++中工作得很好,也许你需要更新? – Nullman

+1

你使用*标记所有*功能吗?试试'[^ a-z \ r \ n]' –

+0

感谢您的回复。我在Notepad ++ 7.2.2中尝试过,它仍然标记所有的行。 @WiktorStribiżew - 谢谢 - 您的建议在TextPad中诀窍。 – 4532066

回答

1

[^a-z]模式可以匹配一个CR或LF符号,这使得TextPad/Notepad ++可以标记每个行。所有你需要做的就是添加\r\n到否定字符类:

[^a-z\r\n] 

注意,这将与您的具体数据只工作,因为它不是小写ASCII字母,回车CR和其他任何字符匹配换行LF符号。

一个正则表达式,将匹配任何字母,但可以在记事本+ +中使用小写ASCII字母:

(?![a-z])\pL 

(请注意,您也可以使用(?![a-z])\p{L})。

这里,(?![a-z])限制匹配任何字母,这样它不能匹配任何小写ASCII字母(注意区分大小写选项必须启用)\pL模式。

enter image description here

1

这是C#,但你应该得到的宜家

Regex.Match(value.ToString() “[àèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ]”);

1

不知道你使用的语言,但这里的JavaScript。

首先,我将数组拆分为数组,然后过滤匹配的单词。

`läkt 
bigarrå 
bekväm 
blixt 
block 
blom 
bärbar 
bärby 
bästis 
bådalen 
bågvik`.split(` 
`).filter(w => /[^a-z]/.test(w)) 

// => ["läkt", "bigarrå", "bekväm", "bärbar", "bärby", "bästis", "bådalen", "bågvik"]