Python 正则表达式将数字字符串替换为字符串
如果有一个由数字串组成的张量(如“32”、“45”等),我如何将其转换为一个符号重复次数与数字指示次数相同的张量 例如,如果我有一个张量[“2”、“3”、“0”、“1”),我想得到像[“aa”、“aaa”、“a”这样的东西 我已经使用numpy获得了它,但是现在我正试图直接在TensorFlow中实现它,因为我没有启动会话,所以我无法查找变量值 我在这里分享一段代码Python 正则表达式将数字字符串替换为字符串,python,tensorflow,Python,Tensorflow,如果有一个由数字串组成的张量(如“32”、“45”等),我如何将其转换为一个符号重复次数与数字指示次数相同的张量 例如,如果我有一个张量[“2”、“3”、“0”、“1”),我想得到像[“aa”、“aaa”、“a”这样的东西 我已经使用numpy获得了它,但是现在我正试图直接在TensorFlow中实现它,因为我没有启动会话,所以我无法查找变量值 我在这里分享一段代码 import tensorflow as tf a = tf.Variable(["2", "3", "0", "1"], dt
import tensorflow as tf
a = tf.Variable(["2", "3", "0", "1"], dtype=tf.dtypes.string)
res = tf.strings.regex_replace(a, "([0-9]+)", r"a" * int("\\1"))
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(res)) # It should show ["aa", "aaa", "", "a"]
但是int(“\1”)不返回数字,而是返回ValueError:
ValueError:以10为基数的int()的文本无效:'\1'我认为使用TensorFlow中的正则表达式无法实现这一点。以下是一种方法:
import tensorflow as tf
def repeat_symbol(nums, symbol):
nums = tf.convert_to_tensor(nums)
symbol = tf.convert_to_tensor(symbol)
# Make sequence mask from numbers
mask = tf.sequence_mask(nums)
# Use sequence mask to pick either the symbol or an empty string
symbol_rep = tf.gather(tf.stack(["", symbol]), tf.cast(mask, tf.int32))
# Join result
return tf.strings.reduce_join(symbol_rep, axis=-1)
with tf.Graph().as_default(), tf.Session() as sess:
a = tf.constant(["2", "3", "0", "1"], dtype=tf.string)
# Convert strings to numbers
a_nums = tf.strings.to_number(a, out_type=tf.int32)
result = repeat_symbol(a_nums, "a")
print(sess.run(result))
# [b'aa' b'aaa' b'' b'a']
我认为用TensorFlow中的正则表达式无法实现这一点。以下是一种方法:
import tensorflow as tf
def repeat_symbol(nums, symbol):
nums = tf.convert_to_tensor(nums)
symbol = tf.convert_to_tensor(symbol)
# Make sequence mask from numbers
mask = tf.sequence_mask(nums)
# Use sequence mask to pick either the symbol or an empty string
symbol_rep = tf.gather(tf.stack(["", symbol]), tf.cast(mask, tf.int32))
# Join result
return tf.strings.reduce_join(symbol_rep, axis=-1)
with tf.Graph().as_default(), tf.Session() as sess:
a = tf.constant(["2", "3", "0", "1"], dtype=tf.string)
# Convert strings to numbers
a_nums = tf.strings.to_number(a, out_type=tf.int32)
result = repeat_symbol(a_nums, "a")
print(sess.run(result))
# [b'aa' b'aaa' b'' b'a']
r“a”*int(“\\1”)
不是字符串,您试图将正则表达式的结果乘以“a”。。。那么result=[“a”*int(x)表示v中的x]
@Jean-Françoisfab,您应该能够将字符串乘以整数。它只会连接字符串x多次。请尝试删除int(“\\1”)
yes中的多余反斜杠,但此参数会传递给replace
函数。首先,您应该使用正则表达式提取整数,然后将其传递给int()并相乘。尝试删除int(\\1”)
中多余的反斜杠:它不起作用r“a”*int(\\1”)
不是字符串,您正在尝试将正则表达式的结果乘以“a”。。。那么result=[“a”*int(x)表示v中的x]
@Jean-Françoisfab,您应该能够将字符串乘以整数。它只会连接字符串x多次。请尝试删除int(“\\1”)
yes中的多余反斜杠,但此参数会传递给replace
函数。首先,您应该使用正则表达式提取整数,然后将其传递给int()并进行乘法。尝试删除int(\\1)中多余的反斜杠。
:这行不通