正则表达式匹配大写字母、小写字母和中间的空格?

Regex to match uppercase, lowercase and spaces in between?

我想找到一个正则表达式,让我可以匹配大写字母、小写字母和介于两者之间的 spaces。

也就是说,下面你可以看到我想要收集的样本。

id,name,continent
1,Louise,Latin America
2,Sasha,Asia
3,Mike,North America


我正在做的是在一段时间内检查记录是否符合正则表达式。但我发现中间有 space 的那些(例如北美或拉丁美洲)没有被拾取。你可以在这里看到我的代码

while read line; do
  if [["$line"=~^.*,.*,[a-zA-Z ]*

我也试过 [a-zA-Z\n]* 但没用。

有什么想法吗?

您可以使用

rx='^[0-9]*,[^,]*,[[:alpha:][:space:]]*$'
while read -r line; do
  if [[ "$line" =~ $rx ]]; then
  // Do something
  fi
done < file

详情:

  • ^ - 字符串开始
  • [0-9]* - 零个或多个数字(看起来你的 ID 列只能包含数字)
  • , - 逗号
  • [^,]* - , 以外的任何零个或多个字符(.* 过于通用并且匹配任何文本,因此如果该行包含三列以上,它将报告有效)
  • , - 逗号
  • [[:alpha:][:space:]]* - 零个或多个字母或空格
  • $ - 字符串结尾。

参见 online demo:

#!/bin/bash
s='id,name,continent
1,Louise,Latin America
2,Sasha,Asia
3,Mike,North America'
rx='^[0-9]*,[^,]*,[[:alpha:][:space:]]*$'
while read -r line; do
  if [[ "$line" =~ $rx ]]; then
      echo "$line: Valid"
  else
      echo "$line: Invalid"
  fi
done <<< "$s"

输出:

id,name,continent: Invalid
1,Louise,Latin America: Valid
2,Sasha,Asia: Valid
3,Mike,North America: Valid