regex 正则表达式-只有一个大写字母且不包含数字的单词

tsm1rwdh  于 2022-12-14  发布在  其他
关注(0)|答案(3)|浏览(144)

我是RegExp的新手。我有一个句子,我想抽出一个满足以下条件的单词-
1.它只能包含一个大写字母
1.只能由字符/字母组成,不能包含数字
例如-“appLe”、“warDrobe”、“hUsh”
不适合的单词-“sf_dsfsdF”,“331 ffsF”,“Leopard 1997”,“mister_Ram”等等。
您将如何解决此问题?

omqzjyyz

omqzjyyz1#

下面的正则表达式应该可以工作:

  • 将查找只有一个大写字母的单词
  • 只查找包含字母的单词(不包含数字或特殊字符)
  • 将匹配整个单词
\b(?=[A-Z])[A-Z][a-z]*\b|\b(?=[a-z])[a-z]+[A-Z][a-z]*\b

匹配项:

appLe
hUsh
Harry
suSan
I

拒绝

HarrY     - has TWO capital letters
warDrobeD - has TWO capital letters
sf_dsfsdF - has SPECIAL characters
331ffsF   - has NUMBERS
Leopd1997 - has NUMBERS 
mistram   - does not have a CAPITAL LETTER

观看实际操作here

注:

如果大写字母为OPTIONAL-则需要在每个[A-Z]后面添加一个?,如下所示:

\b(?=[A-Z])[A-Z]?[a-z]*\b|\b(?=[a-z])[a-z]+[A-Z]?[a-z]*\b
4c8rllxm

4c8rllxm2#

您可以使用字符集([a-z] & [A-Z])和适当的量词(使用?表示一个或零个大写字母)来实现这一点,字符集包含在要捕获的()中,并由断词符\b包围。如果大写字母是可选的,并且可以出现在任何位置,请用途:

/\b([a-z]*[A-Z]?[a-z]*)\b/   //will still match empty string check for length

如果你总是想让一个大写字母出现在任何地方,用途:

/\b([a-z]*[A-Z][a-z]*)\b/    // does not match empty string

如果您总是希望一个大写字母不能是第一个或最后一个字符,请使用用途:

/\b([a-z]+[A-Z][a-z]+)\b/    // does not match empty string

下面是一个工作代码片段,演示了JavaScript中的第二个正则表达式:

const exp = /\b([a-z]*[A-Z][a-z]*)\b/
const strings = ["appLe", "warDrobe", "hUsh", "sf_dsfsdF", "331ffsF", "Leopard1997", "mister_Ram", ""];

for (const str of strings) {
  console.log(str, exp.test(str))
}

Regex101非常适合开发和测试!

bqujaahr

bqujaahr3#

正则表达式:

/\b[a-z\-]*[A-Z][a-z\-]*\b/g

示范:

RegEx101

说明

| 区段|项目名称|
| - -|- -|
|

\b[a-z\-]*

|找到非单词与单词相邻的点([A-Za-z0-9\-]\w),然后匹配零个或多个小写字母和连字符(注意,连字符需要转义(\-))|
|

[A-Z]

|查找单个大写字母|
|

[a-z\-]*\b

|匹配零个或多个小写字母和连字符,然后查找非单词与单词相邻的点|

相关问题