用于匹配或的正则表达式

时间:2013-12-18 22:04:43

标签: regex notepad++ utf

我在Notepad ++中这样做

以下是我的数据的样子

N|12345|JOHN|TAKÁCSI|blah|blah|
N|12466|PÉTER|VÁLI|blah|blah|
Y|45645|SÁNDAR|SÁKU|blah|blah|
N|89789|DÓRA|MERRY|blah|blah|


My regular expression: ^([N|Y]\|.*\|.*[^\x00-\x7F].*\|.*[^\x00-\x7F].*\|)

仅匹配first和lastname中包含UTF字符的行 如果任一名称都有该字符,则不显示。

如何获得?

2 个答案:

答案 0 :(得分:1)

^[NY]\|\d{5}\|(?:[\w_]+[^\x00-\x7F]?[\w_]+\|){2}(?:[\w_]+[\x00-\x7F]?[\w_]+\|){2}$

匹配:

N|12345|JOHN|TAKÁCSI|blah|blah|
N|12466|PÉTER|VÁLI|blah|blah|
Y|45645|SÁNDAR|SÁKU|blah|blah|
N|89789|DÓRA|MERRY|blah|blah|

不匹配:

N|89789|DÓRA|MERRY|blah|blÓh|
N|89789|DoRA|MERRY|blaÓh|blah|
N|89789|DoRA|MERRY|blaÓh|blÓah|

您正在检查两者是否有UTF字符,我将其更改为只需要匹配一个,另一个现在不是强制性的。我还使用@ HamZa的答案部分修改了这个答案,以满足您的数据集和需求。

答案 1 :(得分:1)

您可以使用:^[NY]\|\d+(?:\|[^\W_]+){4}\|$

<强>解释

  • ^:匹配行的开头
  • [NY]:匹配NY。您应该使用[N|Y],因为这也会使其与管道匹配|
  • \|:匹配管道|
  • \d+:匹配一位数或更多
  • (?::非捕获组
    • \|:匹配管道|
    • [^\W_]+:我们可以使用匹配字母数字字符的\w,但也会包含_。所以为了不匹配_我们只是反过来。
  • ){4}:小组结束,重复4次。
  • \|:匹配管道|
  • $:匹配行尾