C#使用正则表达式获取多个匹配

时间:2016-08-09 06:56:36

标签: c# regex

var userVersionHTML = "2448hello2448welcome2448";
Regex regex = new Regex("2448(.*?)2448");
var v = regex.Match(userVersionHTML);
versionNumberStatus.Text = v.Groups[1].ToString();
usernameStatus.Text = v.Groups[2].ToString();

目标是让versionNumberStatus.Text显示“你好”。并usernameStatus.Text显示欢迎'。

问题是usernameStatus.Text没有显示任何内容。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

此处只有一个抓取组,"2448(.*?)2448"模式,因此您无法访问.Groups[2]

解决方案是使用2448拆分或使用2448(.*?)2448(.*?)2448模式。

请参阅regex demo

C# code:

var userVersionHTML = "2448hello2448welcome2448";
var chunks = userVersionHTML.Split(new[] {"2448"}, StringSplitOptions.RemoveEmptyEntries); 
var versionNumberStatus = chunks[0];
var usernameStatus = chunks[1];

答案 1 :(得分:0)

解决方案是使用public class AutoCompleteSearchViewAdapter extends ArrayAdapter<String> implements Filterable { private ArrayList<HashMap<String, String>> fullList = new ArrayList<>(); private ArrayList<HashMap<String, String>> filteredList = new ArrayList<>(); public AutoCompleteSearchViewAdapter(Context context, int resource, ArrayList<HashMap<String, String>> fullList) { super(context, resource); this.fullList = fullList; } @Override public View getView(int position, View convertView, ViewGroup parent) { return super.getView(position, convertView, parent); } @Override public Filter getFilter() { android.widget.Filter filter = new android.widget.Filter() { @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults filterResults = new FilterResults(); if (constraint != null) { ArrayList<HashMap<String, String>> suggestion = new ArrayList<HashMap<String, String>>(); for (int i = 0; i < fullList.size(); i++) { if (fullList.get(i).get("productName").toUpperCase().startsWith(((String) constraint).toUpperCase())) { suggestion.add(fullList.get(i)); } } filterResults.values = suggestion; filterResults.count = suggestion.size(); } return filterResults; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { filteredList.clear(); if (results.values != null) { ArrayList<HashMap<String, String>> newValues = (ArrayList<HashMap<String, String>>) results.values; for (int i = 0; i < newValues.size(); i++) { filteredList.add(newValues.get(i)); } } if (results != null && results.count > 0) { notifyDataSetChanged(); } else { notifyDataSetInvalidated(); } } }; return filter; } @Override public int getCount() { return filteredList.size(); } @Override public String getItem(int position) { return filteredList.get(position).get("productName"); } } 这样的正则表达式:

Matches()