我正在尝试检查未知大小的单个字符串,看它们是否包含小于9但大于1的数字,并且有数字分隔的空格。例如。
SELECT user.*,
xxx.record_count
FROM `user`
JOIN ( select user_id, count(*) as record_count from `transaction`
where transaction.type='L' AND transaction.status='S'
group by user_id) xxx
ON xxx.user_id = user.id
WHERE (user.rating >= '6' OR xxx.record_count >= '100')
AND user.country = 'US'
AND 1 IN (user.can_borrow , user.can_lend);
字符串2和3包含我不希望分别为“66”和“0”的数字。
我目前正在使用嵌套的if语句,但我认为使用Regex会有更好的方法,但我是Regex表示法的新手,所以不要太多。
有更好的方法吗?。
为了使问题清楚,我试图找出一个字符串是否包含大于9或小于1的任何数字。其中字符串在每个数字之间包含空格。
答案 0 :(得分:2)
RegEx是错误的工具。尝试在空间上拆分字符串,并使用您想要将字符串数组的各个元素转换为int
的任何方法。在这里我选择了LINQ。
这是我的头脑。你可能需要调整它来编译。
//assuming your strings are in a List<String>
List<string> strings = ...;
List<int> numbers = null;
// assumes you want to work with each set of numbers individually
foreach (string item in strings) {
numbers = (from n in item.Split(" ") select int.Parse(n)).ToList();
// TODO: remove numbers out of range, or whatever other processing you want to do.
}
答案 1 :(得分:0)
首先将您的字符串转换为整数列表,然后使用linq查找大于9的所有数字.TrreadParse将捕获任何不是数字的字符串并将它们设置为-1。
int i;
List<int> intList = stringArray.Split(' ').Select(s => int.TryParse(s, out i) ? i : -1).ToList();
var results = intList.FindAll(x=> x > 9);
答案 2 :(得分:-3)
WiktorStribiżew提供的答案对我有用,谢谢你的帮助。
Regex.IsMatch(numScreens, @"\b[0-9]{2,}\b")