Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用于选择模板化单词的正则表达式_Regex - Fatal编程技术网

Regex 用于选择模板化单词的正则表达式

Regex 用于选择模板化单词的正则表达式,regex,Regex,我想使用正则表达式查找{}中包含的所有单词 如果我的字符串是,“投保地址{Address}对{Name}无效” 我只想取出“地址”和“姓名”。我已经试了几个小时,但没有成功 非常感谢您的帮助 我试过([/{]([a-zA-Z0-9]*)[}]) 这是行不通的 我用的是C#。模板还可以包含点符号属性,如“Address.city”和“ABC.PQR.XYZ” /\{([a-z0-9]+)\}/i 我不知道您使用的是什么语言,但是大括号内的单词将被捕获到第一个子匹配组中 例如,使用Ruby: st

我想使用正则表达式查找
{}
中包含的所有单词

如果我的字符串是
,“投保地址{Address}对{Name}无效”

我只想取出
“地址”
“姓名”
。我已经试了几个小时,但没有成功

非常感谢您的帮助

我试过
([/{]([a-zA-Z0-9]*)[}])

这是行不通的

我用的是C#。模板还可以包含点符号属性,如“Address.city”和“ABC.PQR.XYZ”

/\{([a-z0-9]+)\}/i
我不知道您使用的是什么语言,但是大括号内的单词将被捕获到第一个子匹配组中

例如,使用Ruby:

str = 'The Insured Addr {Address} is not valid for {Name}'
matches = str.scan(/\{([a-z0-9]+)\}/i).flatten
# => ['Address', 'Name']
我不知道您使用的是什么语言,但是大括号内的单词将被捕获到第一个子匹配组中

例如,使用Ruby:

str = 'The Insured Addr {Address} is not valid for {Name}'
matches = str.scan(/\{([a-z0-9]+)\}/i).flatten
# => ['Address', 'Name']
\{(.*?\}

*?
而不是
*
是为了懒散,不捕捉
{Address}对于作为一个长单元的{Name}
无效。请参见“懒惰而不是贪婪”下的内容

*?
而不是
*
是为了懒散,不捕捉
{Address}对于作为一个长单元的{Name}
无效。请参见“懒惰而不是贪婪”下的内容

印刷品

Address
Name
在控制台上

>>> import re
>>> s = 'The Insured Addr {Address} is not valid for {Name}'
>>> re.findall('\{([a-zA-Z0-9 ]+)\}', s)
['Address', 'Name']
印刷品

Address
Name
在控制台上。

正则表达式:

>>> import re
>>> s = 'The Insured Addr {Address} is not valid for {Name}'
>>> re.findall('\{([a-zA-Z0-9 ]+)\}', s)
['Address', 'Name']
\{([^}]*)}
将同时匹配
'{Address}'
'{Name}'
,并将在匹配组1中捕获
'Address'
'Name'
。因为
[^}]
也匹配换行符,所以如果
{
}
在不同的行上(与
*?
不同),它也会工作。

正则表达式:

\{([^}]*)}
将同时匹配
'{Address}'
'{Name}'
,并将在匹配组1中捕获
'Address'
'Name'
。因为
[^}]
也匹配换行符,所以如果
{
}
位于不同的行上(而
*?
则不是这样)

这将获得大括号内的任何内容,甚至多个单词

如果您希望可能有空白填充,可以使用:

/{\s*([\S+]+?)\s*}/
这意味着{Address}和{Address}返回相同的内容。在这个版本中,标记中不允许有其他空格,但是您可以很容易地使用(+++)。这个意味着它将在两个最近的大括号内找到一个单词

这将获得大括号内的任何内容,甚至多个单词

如果您希望可能有空白填充,可以使用:

/{\s*([\S+]+?)\s*}/

这意味着{Address}和{Address}返回相同的内容。在这个版本中,标记中不允许有其他空格,但是您可以很容易地使用(+++)。这个这意味着它将在两个最近的大括号内找到一个单词。

{([^}]*)将抓住第一个。

{([^}]*)将抓住第一个。

因为
[a-zA-Z0-9]
不匹配
}
,所以不需要懒惰。因为
[a-zA-Z0-9]
不匹配
,,不需要懒惰。可能是打字错误:
[a-zA-z]
应该是
[a-zA-z]
。可能是打字错误:
[a-zA-z]
应该是
[a-zA-z]
。Yogendra,我假设这些
{…}
标签的内部文本不能包含字符
{/code>和
,对吗?是的,巴特,它们不能包含那些字符。Yogendra,我假设这些
{…}
标记的内部文本不能包含
{
}
,对吗?是的,巴特,它们不能包含那些字符。这就解决了问题。如果我有Name.FirstName或类似Address.City.zip的名称,则无法解决此问题。如果我有Name.FirstName或类似Address.City.Zip的内容,它将不起作用