在某些条件下匹配数字的正则表达式模式
Regex pattern to match numbers in certain conditions
第一次发帖,格式不对请见谅。不是真正的程序员,我在 C# 中使用 Revit 和 AutoCAD APi。需要注意的是,由于 Revit API 有点乱,所以相同的代码可能会在不同的 API 中产生不同的结果。所以我有三个基本的字符串模式,我想根据它们的前缀和后缀 return 某些数字。它们可能被其他文本包围,而不是我显示的文本,字符串中的实际数字和位置可能会有所不同。
字符串 1: (12) #4x2'-0 @ 6 EF
字符串 2: (12) #4 @ 6 EF
字符串 3: 交错 2'-0,SPCG 6 AT 12 SLAB
我使用的代码:
if (LengthAsString.IsMatch(remarkdata) == true)
{
Regex remarklength = new Regex(@"isnertRegexPatternhere");
if (remarklength.IsMatch(remarkdata))
{
remarkdata = remarklength.Replace(remarkdata, "[=10=]\u0022");
}
}
remarkdata 是上面的字符串,我在每个数字匹配后添加英寸标记 "。
我测试过的模式及其 returns:
String 1 String 2 String 3
\d+(?!['-]|([(\d+)])) 0,6 4,6 0,6,12
(?<![#])\d+ 12,2,0,6 12,6 2,9,6,12
\d+(?= @)|(?<=@ )\d+ 0,6 6 no matches
expected results: 0,6 6 0,6,12
我很接近,但没有雪茄。想法?
双重编辑:查找不以# 开头,也不在() 之间的数字。忽略@和x,它们可能存在也可能不存在。
您似乎在寻找
(?<!#)\d+(?!.*(?:['-]|[#x]\d))
详情
(?<!#)
- 如果在当前位置 的左侧紧邻 #
,则匹配失败的负后视
\d+
- 1 个或多个数字(或 [0-9]+
仅匹配 ASCII 数字)
(?!.*(?:['-]|[#x]\d))
- 一旦有除换行符 (.*
) 以外的任何 0+ 个字符后跟 '
、-
或#
/x
紧跟当前位置右侧的数字。
请注意,如果您的字符串始终具有平衡的非嵌套括号,并且您可能在 #
或 x1
之后有 (123)
个子字符串,您可能还需要添加 [^()]*\)
进入前瞻
(?<!#)\d+(?!.*(?:['-]|[#x]\d)|[^()]*\))
以避免匹配括号内的数字。
第一次发帖,格式不对请见谅。不是真正的程序员,我在 C# 中使用 Revit 和 AutoCAD APi。需要注意的是,由于 Revit API 有点乱,所以相同的代码可能会在不同的 API 中产生不同的结果。所以我有三个基本的字符串模式,我想根据它们的前缀和后缀 return 某些数字。它们可能被其他文本包围,而不是我显示的文本,字符串中的实际数字和位置可能会有所不同。
字符串 1: (12) #4x2'-0 @ 6 EF
字符串 2: (12) #4 @ 6 EF
字符串 3: 交错 2'-0,SPCG 6 AT 12 SLAB
我使用的代码:
if (LengthAsString.IsMatch(remarkdata) == true)
{
Regex remarklength = new Regex(@"isnertRegexPatternhere");
if (remarklength.IsMatch(remarkdata))
{
remarkdata = remarklength.Replace(remarkdata, "[=10=]\u0022");
}
}
remarkdata 是上面的字符串,我在每个数字匹配后添加英寸标记 "。
我测试过的模式及其 returns:
String 1 String 2 String 3
\d+(?!['-]|([(\d+)])) 0,6 4,6 0,6,12
(?<![#])\d+ 12,2,0,6 12,6 2,9,6,12
\d+(?= @)|(?<=@ )\d+ 0,6 6 no matches
expected results: 0,6 6 0,6,12
我很接近,但没有雪茄。想法?
双重编辑:查找不以# 开头,也不在() 之间的数字。忽略@和x,它们可能存在也可能不存在。
您似乎在寻找
(?<!#)\d+(?!.*(?:['-]|[#x]\d))
详情
(?<!#)
- 如果在当前位置 的左侧紧邻 \d+
- 1 个或多个数字(或[0-9]+
仅匹配 ASCII 数字)(?!.*(?:['-]|[#x]\d))
- 一旦有除换行符 (.*
) 以外的任何 0+ 个字符后跟'
、-
或#
/x
紧跟当前位置右侧的数字。
#
,则匹配失败的负后视
请注意,如果您的字符串始终具有平衡的非嵌套括号,并且您可能在 #
或 x1
之后有 (123)
个子字符串,您可能还需要添加 [^()]*\)
进入前瞻
(?<!#)\d+(?!.*(?:['-]|[#x]\d)|[^()]*\))
以避免匹配括号内的数字。