尽管有大量的在线文档,我仍然在努力寻找一些ruby正则表达式语法。我有一个字符串数组,我正在寻找包含一个数字(无论数字位数)但不是特定数字的字符串(例如,假设从19XX到201X的日期)。
我设法获得#34的正则表达式;该行包含一个数字"
.*\p{N}.*
如果这个数字是一年"
,我设法得到"排除该行(?!19\d\d|20[0-1]\d)\d{4}
但我无法将两者结合起来。我需要一些直观地写成的东西
(.*\p{N}.*)&&(?!19\d\d|20[0-1]\d)\d{4}
但我不确定如何使用AND运算符。
答案 0 :(得分:1)
这是:
private void button1_Click(object sender, EventArgs e)
{
int i = 0;
List<int> ChkedRow = new List<int>();
for (i = 0; i <= dataGridView1.RowCount - 1; i++)
{
if (Convert.ToBoolean(dataGridView1.Rows[i].Cells["Column1"].Value) == true)
{
ChkedRow.Add(i);
}
}
if (ChkedRow.Count == 0)
{
MessageBox.Show("Select Items to view report");
return;
}
foreach (int j in ChkedRow)
{
String ConnectionString1 = @"Data Source=.\SQLEXPRESS;Initial Catalog=tempdb;Integrated Security=True;Pooling=False";
cnnStr = @"create table ##gridtemp (itmcod varchar(7)) INSERT INTO ##gridtemp (itmcod)
VALUES ('" + dataGridView1.Rows[j].Cells["title"].Value.ToString() + "');";
try
{
using (SqlConnection cs = new SqlConnection(ConnectionString1))
{
using (cmd = new SqlCommand(cnnStr, cs))
{
cs.Open();
cmd.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
MessageBox.Show("Records Added Succesfully");
}
你想要一个字符串:
^(?!.*19\d\d.*)(?!.*20[01]\d.*)(.*\p{N}.*)$
不包含19xx (?!.*19\d\d.*)
不包含200x或201x (?!.*20[01]\d.*)
包含,至少,一位数正则表达式(.*\p{N}+.*)
表示,文字&&
而不是&&
运算符
如果您想捕获不在and
范围内的数字,可以替换为:
1900-2019
您可以对其进行测试here
答案 1 :(得分:0)
虽然托马斯的解决方案可能是最好的解决方案,但另一个选择是没有否定:只需选择匹配的所有内容:
re = /\D(
[03-9]\d*|
(?:1|2|20)(?=\D)|
1[0-8]\d*|
19\d?(?=\D)|
19\d{3,}|
20[2-9]\d*|
20[01]?(?=\D)|
20[01]\d{2,}
)/x
▶ 'Here 2014 and 1945 and 1878 and 20000 and 2 and 19 and 195 and 203'.scan re
#⇒ [["1878"], ["20000"], ["2"], ["19"], ["195"], ["203"]]