在R中使用正则表达式匹配标点时出现问题

在R中使用正则表达式匹配标点时出现问题,r,regex,R,Regex,我正在将数据转换为XML格式。XML约束之一是: 标记名不能包含任何字符!“#$%&'()*+,/;?@[]^`{124;}~,也不能是空格字符,不能以“--”、“.”或数字开头 我试图在创建标记之前捕获这些错误,但在使用正则表达式匹配任何包含这些字符的内容时遇到困难 我希望能够使用“[:punct:”,但由于允许使用一些标点符号,我不能 我尝试过的正则表达式: '[!"#$%&\'()*+,/;<=>?@[\\]^`\\{|\\}~ ]' 我假设我搞乱了反斜杠转义的语法或

我正在将数据转换为XML格式。XML约束之一是:

标记名不能包含任何字符!“#$%&'()*+,/;?@[]^`{124;}~,也不能是空格字符,不能以“--”、“.”或数字开头

我试图在创建标记之前捕获这些错误,但在使用正则表达式匹配任何包含这些字符的内容时遇到困难

我希望能够使用“[:punct:”,但由于允许使用一些标点符号,我不能

我尝试过的正则表达式:

'[!"#$%&\'()*+,/;<=>?@[\\]^`\\{|\\}~ ]'

我假设我搞乱了反斜杠转义的语法或对[]的理解。但是,我一直在做研究,但仍然无法找出问题所在。任何帮助都会很好。谢谢。

我认为您只需要更多转义。在这里,我转义了每个特殊的正则表达式字符,并对模式进行了重新排序,以便它们与
实践中的顺序相同。
。请注意,您有
]
出现在
practice
中,我删除了它,并添加了
\u
的示例,因为您说这些是允许的,我可以证明它们不匹配

请记住,
\
在R字符串中是转义,然后在正则表达式中也是转义,因此您需要
\\
在正则表达式中转义特殊字符。换句话说,提供的字符串
\\\$
被视为模式
\$
,这意味着一个文本
$
,而不是字符串的结尾。这也意味着您需要
\\\\\
来获取文本
\

练习[1]假假真真
#>[12]真的
#>[23]真的

创建于2019-05-17,由(v0.2.1)

可能
grepl([:punct:[:space:][],practice)
创建。请参见
?regex
中的命名字符类。嘿,鲁伊,很遗憾,我不能使用[:punct:]因为“.”和“-”都是允许的。不过谢谢。Calum,谢谢你。我真的很感谢你的帮助。我被双重越狱弄糊涂了。这很有效
practice <- c("T[K","T!K","T\"K","T#K","T$K","T%K","T&K","T'K","T(K",  "T)K","T*K","T+K","T,K","T/K","T;K","T<K","T=K","T>K","T?K","T@K",  "T[K","T\\K","T]K","T^K","T`K","T{K","T|K","T}K","T~K","T]K")

grepl(pattern = '[!"#$%&\'()*+,/;<=>?@[\\]^`\\{|\\}~]', practice)
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[18] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE