我正在处理一个包含Twitter句柄的数组,例如:
<tr class="google-visualization-table-tr-even">
<td class="google-visualization-table-td">TC-206</td>
<td class="google-visualization-table-td">Customer logs in</td>
<td class="google-visualization-table-td">Fail</td>
<td class="google-visualization-table-td">Fail</td><td class="google-visualization-table-td">Fail</td>
<td class="google-visualization-table-td">Pass</td>
<td class="google-visualization-table-td">Fail</td>
<td class="google-visualization-table-td">Pass</td>
</tr>
<tr class="google-visualization-table-tr-odd">
<td class="google-visualization-table-td">TC-207</td>
<td class="google-visualization-table-td">Customer signs out</td>
<td class="google-visualization-table-td">Fail</td>
<td class="google-visualization-table-td">Fail</td>
<td class="google-visualization-table-td">Fail</td>
<td class="google-visualization-table-td">Fail</td>
<td class="google-visualization-table-td">Pass</td>
<td class="google-visualization-table-td">Pass</td>
</tr>
我想知道有多少个以大写字母开头的句柄。
答案 0 :(得分:4)
如果问题是“一个集合中有多少个”,那么count很可能是一个解决之道。
正则表达式gcloud functions deploy some_function --runtime python37 --trigger-resource bucket --trigger-event google.storage.object.finalize --memory 2048 --timeout 500
的好处是它匹配A-Z以外的大写字母。
/[[:upper:]]/
答案 1 :(得分:3)
即使有一个公认的答案,我也觉得值得一提,使用#count
而不是#inject
可以实现相同的目的:
array = ["@user1","@User2","@uSer3","@User4"]
capital_letters = ('A'..'Z')
array.count {|x| capital_letters.include?(x[1])}
#=> 2
如果将块分配给#count
方法,它将计算该块为其返回真值的元素数。在这种情况下,如果数组x[1]
的第二个字母是从A到Z的大写字母,则该块的值为true。这在假设数组中的每个字符串都以"@"
开头的情况下起作用
答案 2 :(得分:-1)
我使用了正则表达式来匹配@
,然后在字符串的开头匹配大写字母。
count
是最语义的功能(感谢@crenmo):
array.count {|e| e =~ /^@[A-Z]/}
select
在您需要匹配元素列表以及(可选)大小的情况下很有用:
array.select {|e| e =~ /^@[A-Z]/ }.size
如果您希望匹配非英语大写字母(感谢@CarySwoveland),请使用[[:upper:]]
而不是[A-Z]
。
作为参考,可以使用括号表示法索引到字符串中(尽管我并没有使用它):str[0]