当前位置: 首页 > 知识库问答 >
问题:

不匹配任何字母或标点符号的Unicode正则表达式

昝浩阔
2023-03-14

我试图创建一个unicode正则表达式,它匹配每个字符,除了一个字母(任何语言的)和标点符号.;:?!

比如字符串

abcd 123 kjd·%/(“?:!”!

应该只匹配下面的粗体部分

abcd 123 kjd·%/(“?:!”!

我知道\P{L}匹配除字母之外的所有内容,\P{P}匹配除标点符号之外的所有内容。我如何将这两个正则表达式字符串组合为一个?我已经尝试过简单地将\P{L}\P{P}放在一起,但这并没有给出所需的匹配。我也尝试过编写[^.;:?!] \P{L}但这也不起作用。

如何组合一个或多个unicode正则表达式,或者是否有更好的正则表达式满足我的要求?

共有1个答案

秦俊
2023-03-14

使用\P{L}\P{P}将匹配任何字母相反的1倍,后跟任何标点符号相反的1倍。

模式[^;:?!]\P{L}匹配除所列字符之外的任何字符的1倍,后跟任何字母的1倍。

您可以做的是将\p{L}(它将匹配任何类型的字母)添加到否定字符类中。根据Wiktor Stribiżew的建议,您可以添加\p{Z}来匹配任何类型的空白。

[^\p{Z}\p{L}.;:?!]

正则表达式演示

 类似资料:
  • 为什么下面的正则表达式不匹配连字符(或与号、句号或逗号,尽管我暂时将它们排除在下面的字符类之外)?我在试着匹配字符串... ...(这是单词“hello”的语音表示),并且当字符串中有连字符时,匹配失败(上面列出的与数等相同)。 这种模式... ...起作用,根据regex101.com的说法,它本质上是完全相同的模式,所以我不明白为什么更长的模式不起作用。

  • 问题内容: 在.net中,您可以使用它来匹配任何字母,如何在Python中进行匹配?即,我想匹配任何大写,小写和带重音的字母。 问题答案: Python的模块尚不支持Unicode属性。但是您可以使用该标志编译正则表达式,然后字符类速记也将与Unicode字母匹配。 由于还将匹配数字,因此您需要从字符类中减去数字以及下划线: 将匹配任何Unicode字母。

  • 问题内容: 在StackOverflow上有很多问题和答案,假设可以在regexp中使用来匹配“字母” 。但是,使用Unicode时,会有更多的字符被大多数人视为字母(所有希腊字母,Cyrllic ..等等)。Unicode定义了许多块,每个块可能都有“字母”。 Java定义 为诸如字母字符之类的东西定义了Posix类,但是被指定为仅与US- ASCII一起使用。预定义的字符类将单词定义为,其中还

  • 问题内容: 我已经阅读了Stackoverflow上的其他问题,但还没有结束。抱歉,如果已经可以回答,但是我没有任何建议在那里工作。 一切都很好,然后我尝试使用其中包含挪威字符的内容(或更像unicode的内容): 如何匹配øæå等典型的unicode字符?我希望能够同时在上述标记组和文件名标记组中匹配这些字符。 问题答案: 您需要指定标志, 并 使用前缀将您的字符串输入为Unicode字符串:

  • 我正在尝试匹配以下正则表达式: 换句话说,一个单词边界后跟上面的任何字符串(可选地跟一个句点字符),后面跟一个单词边界。 我也在regex101上尝试过这一操作,但与数仍然不匹配:https://regex101.com/r/klkmwl/1 转义符并没有什么区别,我已经尝试使用十六进制转义序列来代替和符(如本问题所建议的)。为什么这不匹配?

  • 问题内容: 我有一串 字符串1 (不包括引号)->“我的车号是# 8746253 ,这实际上很酷” 条件-数字8746253可以是任意长度,并且 -数字也可以紧跟在行尾。 我要分组 8746253 ,不应在其后加上点“”。 我努力了, 。#(\ d +)[^。]。 这可以肯定地得到我的数字,但是即使有一个点也可以匹配,因为[。^]将匹配数字的最后一位(例如,在下面的情况下为 3 ) 字符串2 (不