Regex 在python中使用正则表达式仅提取特定字符
我需要提取特定字符,如括号(不是括号中的元素)、*、#等,并将其替换为“”。所以我编译了我的模式,如下所示Regex 在python中使用正则表达式仅提取特定字符,regex,python-3.x,Regex,Python 3.x,我需要提取特定字符,如括号(不是括号中的元素)、*、#等,并将其替换为“”。所以我编译了我的模式,如下所示 p = re.compile(r'\s([\[]).*|\s([\(]).*|\s([#]).*|\s([\{]).*|\s([\*]).*|\s([\<]).*|\s.*(\>)\s|\s.* (\])\s|\s.*(\))\s|\s.*(#)\s|\s.*(\*)\s|\s.*(\})\s') string = "hello (you) " for match
p = re.compile(r'\s([\[]).*|\s([\(]).*|\s([#]).*|\s([\{]).*|\s([\*]).*|\s([\<]).*|\s.*(\>)\s|\s.*
(\])\s|\s.*(\))\s|\s.*(#)\s|\s.*(\*)\s|\s.*(\})\s')
string = "hello (you) "
for match in re.finditer(p, string):
print(match.group())
["(",")"]
但我期望的是match将输出列表与捕获的组进行匹配,如下所示
p = re.compile(r'\s([\[]).*|\s([\(]).*|\s([#]).*|\s([\{]).*|\s([\*]).*|\s([\<]).*|\s.*(\>)\s|\s.*
(\])\s|\s.*(\))\s|\s.*(#)\s|\s.*(\*)\s|\s.*(\})\s')
string = "hello (you) "
for match in re.finditer(p, string):
print(match.group())
["(",")"]
这样我就可以用“”替换它,并将所需的输出作为
hello you
Input: Abnormal heart rate (with fever) should be monitored. Insert your <Name> here.
Output:Abnormal heart rate with fever should be monitored. Insert your Name here.
你好
输入:应监测心率异常(伴有发热)。在此处插入您的密码。
输出:应监测伴有发热的心率异常。在这里插入你的名字。
只需在单个字符集中列出所有要删除的字符,然后使用re.sub()
删除它们
print(re.sub(r'[[\](){}<>#*]', '', string))
print(re.sub(r'[\](){}\*]','',字符串))
此答案假设您只想用括号或尖括号中的内容替换括号或尖括号中的术语。即:
(with fever) -> with fever
<Name> -> Name
这张照片是:
Abnormal heart rate with fever should be monitored. Insert your Name here.
这里的逻辑是,我们有选择地针对
(…)
和
术语使用一种替代方法。然后,我们将整个匹配传递给lambda回调,该回调随后仅用内容替换周围的符号。我认为您可以继续用空格替换所有符号,a-Z a-Z除外,如果您还需要可以指定的数字0-9
public class MyClass {
public static void main(String args[]) {
String string = "hello (you) hai";
String result =string.replaceAll("[^A-Z a-z]","");
System.out.println(result);
}
}
这将起作用,但这里我们使用的是replaceAll() 如果您只想删除某些字符,则不需要正则表达式。是否可以添加更多示例数据来显示您试图捕获的内容(而不是
(您)
)?当输入字符串中没有逗号时,为什么希望它返回(,)
?为什么要使用替代项而不是[(#{*..)
?顺便说一句,您不需要转义[]
中的大多数特殊字符。OP询问了一个Python解决方案。