我有这样的字符串:
−+-~*/@$^#¨%={}[häagen-dazs;:] a (le & co') jsou "výborné" <značky>?!.
我想最终得到这个:
häagen-dazs a le & co jsou výborné značky.
与How to filter string for unwanted characters using regex?相比,我想在字符串中保持重音(变音符号)。
我使用以下replaceAll:
str.replaceAll("[¨%=;\\:\\(\\)\\$\\[\\]\\{\\}\\<\\>\\+\\*\\−\\@\\#\\~\\?\\!\\^\\'\\\"\\|\\/]", "");
答案 0 :(得分:1)
您可以循环浏览所有输入String
字符并测试每个字符是否符合您想要的正则表达式保留它,使用此正则表达式[a-zA-Z& \\-_\\.ýčéèêàâùû]
分别测试每个字符。
这是您需要的代码:
String input = "−+-~*/@$^#¨%={}[häagen-dazs;:] a (le & co') jsou výborné <značky>?!";
StringBuffer sb = new StringBuffer();
for(char c : input.toCharArray()){
if((Character.toString(c).toLowerCase()).matches("[a-zA-Z& \\-_\\.ýčéèêàâùû]")){
sb.append(c);
}
}
System.out.println(sb.toString());
<强>演示:强>
这里的a working Demo使用此代码并提供以下输出:
-hagen-dazs. a le & co jsou výborné značky
注意:强>
input.toCharArray()
获取char
的数组并循环遍历它。(Character.toString(c).toLowerCase()).matches("[a-zA-Z& \\-_\\.ýčéèêàâùû]")
来测试迭代的char
是否与允许的字符Regex匹配。StringBuffer
构建一个只有String
的新#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Apr 20 17:23:07 2017
@author: gengyoung
"""
from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf
mnist = input_data.read_data_sets("MNIST_data/",one_hot=True)
sess = tf.InteractiveSession()
def weights(shape):
return tf.Variable(tf.truncated_normal(shape,stddev=0.1))
def biases(shape):
return tf.Variable(tf.constant(0.1,shape=shape))
def conv2d(X,W):
return tf.nn.conv2d(X,W,[1,1,1,1],padding='SAME')
def max_pool_2x2(X):
return tf.nn.max_pool(X,[1,2,2,1],[1,1,1,1],padding='SAME')
X = tf.placeholder(dtype=tf.float32,shape=[None,784])
y = tf.placeholder(dtype=tf.float32,shape=[None,10])
keep_prob = tf.placeholder(tf.float32)
X_train = tf.reshape(X,[-1,28,28,1])
w1 = weights([5,5,1,32])
b1 =biases([32])
conv1 = tf.nn.relu(conv2d(X_train,w1)+b1)
pool1 = max_pool_2x2(conv1)
w2 = weights([5,5,32,64])
b2 = biases([64])
conv2 = tf.nn.relu(conv2d(pool1,w2)+b2)
pool2 = max_pool_2x2(conv2)
f_w1 = weights([7*7*64,1024])
f_b1 = biases([1024])
f_w2 = weights([1024,10])
f_b2 = biases([10])
flatten_pool2 = tf.reshape(pool2,[-1,7*7*64])
h1 = tf.nn.relu(tf.matmul(flatten_pool2,f_w1)+f_b1)
h1_drop = tf.nn.dropout(h1,keep_prob)
predict_y = tf.nn.softmax(tf.matmul(h1_drop,f_w2)+f_b2)
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y*tf.log(predict_y),reduction_indices=[1]))
train_step = tf.train.AdamOptimizer(0.0001).minimize(cross_entropy)
corrct_prediction = tf.equal(tf.argmax(predict_y,1),tf.argmax(y,1))
accuracy = tf.reduce_mean(tf.cast(corrct_prediction,tf.float32))
tf.global_variables_initializer().run()
for i in range(2000):
batch = mnist.train.next_batch(50)
if i%100 == 0:
train_accuracy = accuracy.eval(feed_dict={X:batch[0],y:batch[1],keep_prob:1.0})
print("step:%04d accuracy:%.9f"%(i,train_accuracy))
train_step.run(feed_dict={X:batch[0],y:batch[1],keep_prob:0.5})
print("Test accuracy: %.9f"%accuracy.eval(feed_dict={X:mnist.test.images,y:mnist.test.labels,
keep_prob:1.0}))
允许的字符。答案 1 :(得分:1)
您需要使用
String res = input.replaceAll("(?U)[^\\p{L}\\p{N}\\s&.-]+", "");
请注意,正则表达式匹配除(因为[^...]
是否定的字符类)之外的任何字符,一次或多次(由于+
量词):
\p{L}
- 任何Unicode字母\p{N}
- 任何Unicode数字\s
- 由于\s
内联(?U)
修饰符版本,任何Unicode空格(Pattern.UNICODE_CHARACTER_CLASS
都会识别Unicode)&
- 文字&
.
- 文字.
-
- 一个字面连字符(因为它位于字符类的末尾import java.util.*;
import java.lang.*;
class Rextester
{
public static void main(String args[])
{
String input = "−+-~*/@$^#¨%={}[häagen-dazs;:] a (le & co') jsou výborné <značky>?!";
input = input.replaceAll("(?U)[^\\p{L}\\p{N}\\s&.-]+", "");
System.out.println(input);
}
}
输出:-häagen-dazs a le & co jsou výborné značky
答案 2 :(得分:0)
试试这个
str.replaceAll("[\\\/\.\:\%\!\[\]\(\)\{\}\?\^\*\+\"\'#@$;¨=&<>-~−]", "");
你的正则表达式与sintax有问题,我建议你一步一步建立你的正则表达式,以便立即找出是否有错误。
尝试使用此网站实时测试正则表达式,它非常好