正则表达式匹配大写字母、小写字母和中间的空格?
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
我想找到一个正则表达式,让我可以匹配大写字母、小写字母和介于两者之间的 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